Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- proc VMguest
- push rbx
- mov ebx, ecx
- ;; es cs ss ds fs gs ldtr tr - selector
- .if ebx = GUEST16
- .elseif ebx = GUEST32
- mov eax, 8h
- mov ecx, 10h
- .elseif ebx = GUEST64
- mov eax, 10h
- mov ecx, 20h
- .endif
- mov [vm_mem.g_es_sel], ecx
- mov [vm_mem.g_cs_sel], eax
- mov [vm_mem.g_ss_sel], ecx
- mov [vm_mem.g_ds_sel], ecx
- mov [vm_mem.g_fs_sel], eax
- mov [vm_mem.g_gs_sel], eax
- mov [vm_mem.g_ldtr_sel], 0
- mov [vm_mem.g_tr_sel], 18h
- ;; es cs ss ds fs gs ldtr tr gdtr idtr - limit
- .if ebx = GUEST16
- .elseif ebx = GUEST32
- .elseif ebx = GUEST64
- mov eax, 0ffffffffh
- mov ecx, GDT64_lim
- mov edx, IDT64_lim
- .endif
- mov [vm_mem.g_es_limit], eax
- mov [vm_mem.g_cs_limit], eax
- mov [vm_mem.g_ss_limit], eax
- mov [vm_mem.g_ds_limit], eax
- mov [vm_mem.g_fs_limit], eax
- mov [vm_mem.g_gs_limit], eax
- mov word [vm_mem.g_ldtr_limit], ax
- mov [vm_mem.g_tr_limit], 10h
- mov [vm_mem.g_gdtr_limit], ecx
- mov [vm_mem.g_idtr_limit], edx
- ;; es cs ss ds fs gs ldtr tr - access
- .if ebx = GUEST16
- .elseif ebx = GUEST32
- .elseif ebx = GUEST64
- mov eax, 0c093h
- mov ecx, 0a09bh
- .endif
- mov [vm_mem.g_es_acc], eax
- mov [vm_mem.g_cs_acc], ecx
- mov [vm_mem.g_ss_acc], eax
- mov [vm_mem.g_ds_acc], eax
- mov [vm_mem.g_fs_acc], eax
- mov [vm_mem.g_gs_acc], eax
- mov [vm_mem.g_ldtr_acc], 82h
- mov [vm_mem.g_tr_acc], 8bh
- ;; interruptibility state
- mov [vm_mem.g_interrupt], 8
- ;; smbase
- ;; vmx-preemption timer
- ;; ia32_sysenter_cs
- ;; vmcs link pointer
- mov [vm_mem.g_vmcs_linkpointer_f], 0ffffffffh
- mov [vm_mem.g_vmcs_linkpointer_hi], 0ffffffffh
- ;; ia32_debugctl
- ;; pdpte0 pdpte1 pdpte2 pdpte3
- ;; pat
- ;; efer
- .if ebx = GUEST16
- .elseif ebx = GUEST32
- .elseif ebx = GUEST64
- mov eax, 500h
- .endif
- mov [vm_mem.g_ia32_efer_f], eax
- ;; es cs ss ds ldtr - base
- .if ebx = GUEST16
- .elseif ebx = GUEST32
- .elseif ebx = GUEST64
- .endif
- ;; dr7
- ;; rflags
- mov [vm_mem.g_rflags], 3
- ;; pending debug extension
- ;; cr0 cr3 cr4
- .if ebx = GUEST16
- .elseif ebx = GUEST32
- .elseif ebx = GUEST64
- mov ecx, 80000031h
- mov rdx, 60000h
- mov rax, cr4
- .endif
- mov [vm_mem.g_cr0], rcx
- mov [vm_mem.g_cr3], rdx
- mov [vm_mem.g_cr4], rax
- ;; fs gs tr gdtr idtr - base
- .if ebx = GUEST16
- .elseif ebx = GUEST32
- .elseif ebx = GUEST64
- mov rax, GDT64
- mov rcx, IDT64
- .endif
- mov [vm_mem.g_gdtr_base], rax
- mov [vm_mem.g_idtr_base], rcx
- ;; rsp rip
- mov [vm_mem.g_rsp], RSP_BASE
- mov [vm_mem.g_rip], VmxGuest
- ;; ia32_sysenter_esp ia32_sysenter_eip
- pop rbx
- ret
- endp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement