Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. proc VMguest
  2.     push rbx
  3.    
  4.     mov ebx, ecx
  5.    
  6.     ;; es cs ss ds fs gs ldtr tr - selector
  7.     .if ebx = GUEST16
  8.    
  9.     .elseif ebx = GUEST32
  10.         mov eax, 8h
  11.         mov ecx, 10h
  12.    
  13.     .elseif ebx = GUEST64
  14.         mov eax, 10h
  15.         mov ecx, 20h
  16.     .endif
  17.  
  18.     mov [vm_mem.g_es_sel], ecx
  19.     mov [vm_mem.g_cs_sel], eax
  20.     mov [vm_mem.g_ss_sel], ecx
  21.     mov [vm_mem.g_ds_sel], ecx
  22.     mov [vm_mem.g_fs_sel], eax
  23.     mov [vm_mem.g_gs_sel], eax
  24.     mov [vm_mem.g_ldtr_sel], 0
  25.     mov [vm_mem.g_tr_sel], 18h
  26.        
  27.    
  28.     ;; es cs ss ds fs gs ldtr tr gdtr idtr - limit
  29.     .if ebx = GUEST16
  30.    
  31.     .elseif ebx = GUEST32
  32.        
  33.     .elseif ebx = GUEST64
  34.         mov eax, 0ffffffffh
  35.         mov ecx, GDT64_lim
  36.         mov edx, IDT64_lim
  37.     .endif
  38.        
  39.         mov [vm_mem.g_es_limit], eax
  40.         mov [vm_mem.g_cs_limit], eax
  41.         mov [vm_mem.g_ss_limit], eax
  42.         mov [vm_mem.g_ds_limit], eax
  43.         mov [vm_mem.g_fs_limit], eax
  44.         mov [vm_mem.g_gs_limit], eax
  45.        
  46.         mov word [vm_mem.g_ldtr_limit], ax
  47.         mov [vm_mem.g_tr_limit], 10h
  48.    
  49.         mov [vm_mem.g_gdtr_limit], ecx
  50.         mov [vm_mem.g_idtr_limit], edx
  51.    
  52.     ;; es cs ss ds fs gs ldtr tr - access
  53.     .if ebx = GUEST16
  54.    
  55.     .elseif ebx = GUEST32
  56.        
  57.     .elseif ebx = GUEST64
  58.         mov eax, 0c093h
  59.         mov ecx, 0a09bh
  60.        
  61.     .endif
  62.         mov [vm_mem.g_es_acc], eax
  63.         mov [vm_mem.g_cs_acc], ecx
  64.         mov [vm_mem.g_ss_acc], eax
  65.         mov [vm_mem.g_ds_acc], eax
  66.         mov [vm_mem.g_fs_acc], eax
  67.         mov [vm_mem.g_gs_acc], eax
  68.        
  69.         mov [vm_mem.g_ldtr_acc], 82h
  70.         mov [vm_mem.g_tr_acc], 8bh
  71.    
  72.     ;; interruptibility state
  73.     mov [vm_mem.g_interrupt], 8
  74.    
  75.     ;; smbase
  76.        
  77.     ;; vmx-preemption timer
  78.    
  79.     ;; ia32_sysenter_cs
  80.    
  81.     ;; vmcs link pointer
  82.     mov [vm_mem.g_vmcs_linkpointer_f], 0ffffffffh
  83.     mov [vm_mem.g_vmcs_linkpointer_hi], 0ffffffffh
  84.    
  85.     ;; ia32_debugctl
  86.    
  87.     ;; pdpte0 pdpte1 pdpte2 pdpte3 
  88.    
  89.     ;; pat
  90.    
  91.     ;; efer
  92.     .if ebx = GUEST16
  93.    
  94.     .elseif ebx = GUEST32
  95.        
  96.     .elseif ebx = GUEST64
  97.         mov eax, 500h
  98.     .endif
  99.    
  100.     mov [vm_mem.g_ia32_efer_f], eax
  101.    
  102.     ;; es cs ss ds ldtr - base
  103.     .if ebx = GUEST16
  104.    
  105.     .elseif ebx = GUEST32
  106.        
  107.     .elseif ebx = GUEST64
  108.        
  109.     .endif
  110.    
  111.     ;; dr7
  112.    
  113.     ;; rflags
  114.     mov [vm_mem.g_rflags], 3
  115.    
  116.     ;; pending debug extension
  117.    
  118.     ;; cr0 cr3 cr4
  119.     .if ebx = GUEST16
  120.    
  121.     .elseif ebx = GUEST32
  122.        
  123.        
  124.     .elseif ebx = GUEST64
  125.         mov ecx, 80000031h
  126.         mov rdx, 60000h
  127.         mov rax, cr4
  128.     .endif
  129.         mov [vm_mem.g_cr0], rcx
  130.         mov [vm_mem.g_cr3], rdx
  131.         mov [vm_mem.g_cr4], rax
  132.        
  133.    
  134.     ;; fs gs tr gdtr idtr - base
  135.     .if ebx = GUEST16
  136.    
  137.     .elseif ebx = GUEST32
  138.        
  139.     .elseif ebx = GUEST64
  140.         mov rax, GDT64
  141.         mov rcx, IDT64     
  142.     .endif
  143.    
  144.         mov [vm_mem.g_gdtr_base], rax
  145.         mov [vm_mem.g_idtr_base], rcx
  146.        
  147.        
  148.     ;; rsp rip
  149.         mov [vm_mem.g_rsp], RSP_BASE
  150.         mov [vm_mem.g_rip], VmxGuest
  151.    
  152.    
  153.     ;; ia32_sysenter_esp ia32_sysenter_eip
  154.        
  155.    
  156.     pop rbx
  157.     ret
  158. endp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement