Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- proc VMexec
- ; проверить VMX_SUPPORT
- mov rax, [VMX_SUPPORT]
- and eax, BASE_TRUE
- jnz @F
- ; pin-based
- ; 0 - external-interrupt
- ; 3 - NMI
- ; 5 - virtual NMI
- ; 6 - activate vmx-preemption timer
- mov ecx, IA32_VMX_PINBASED_CLTS
- jmp VMexec1
- @@:
- invoke DrawStringPos, 500, 50, addr basic_msr55
- mov ecx, IA32_VMX_TRUE_PINBASED_CLTS
- VMexec1:
- rdmsr
- and eax, edx
- mov dword [vm_mem.ctrl_vmx_pin], eax
- ; проверить VMX_SUPPORT
- mov rax, [VMX_SUPPORT]
- and eax, BASE_TRUE
- jnz @F
- ; proc-based
- ; 2 - interrupt-window 21 - tpr shadow
- ; 3 - tsc offset 22 - nmi-window
- ; 7 - hlt 23 - mov dr
- ; 9 - invplg 24 - unconditional i/o
- ; 10 - mwait 25 - use i/o bitmaps
- ; 11 - rdpmc 27 - monitor trap flag
- ; 12 - rdtsc 28 - use msr bitmaps
- ; 15 - cr3-load 29 - monitor
- ; 16 - cr3-store 30 - pause
- ; 19 - cr8-load 31 - activate secondary controls
- ; 20 - cr8-store
- mov ecx, IA32_VMX_PROCBASED_CLTS
- jmp VMexec2
- @@:
- mov ecx, IA32_VMX_TRUE_PROCBASED_CLTS
- VMexec2:
- rdmsr
- and eax, edx
- ;; проверка secondary proc
- bts edx, 31
- jnc @F
- or eax, 1 shl 31
- @@:
- mov [vm_mem.ctrl_vmx_cpu], eax
- bts edx, 31
- jnc @F
- invoke DrawStringPos, 20, 65, addr szSecondProcSupp
- invoke VMexecSecondProc
- @@:
- ;; exception bitmap
- ;; page-fault error-code mask
- ;; page-fault error-code match
- ;; cr3-target count
- ;; tpr threshold
- ;; ple_gap
- ;; ple_window
- ;; i/o bitmap a
- ;; i/o bitmap b
- ;; msr bitmap
- ;; executive-vmsc
- ;; tsc offset
- ;; virtual-apic addr
- ;; eptp
- ;; 2:0 0-uncache, 6 - write-back
- ;; 5:3 равно значение page-walk минус единица (page-walk - 1)
- ;; проверка EPTP
- mov rax, [VMX_SUPPORT]
- and eax, EPTP_TRUE
- jz @F
- mov [vm_mem.ctrl_eptp_f], 60000h+11000b
- @@:
- ret
- endp
- proc VMexecSecondProc
- push rbx
- ; 0 - virtualize apic
- ; 1 - enable ept
- ; 2 - descriptor table
- ; 3 - enable rdtscp
- ; 4 - virtualize x2apic
- ; 5 - enable vpid
- ; 6 - wbinvd
- ; 7 - unrestricted guest
- ; 10 - pause-loop
- mov ecx, IA32_VMX_PROCBASED_CLTS2 ;48bh
- rdmsr
- mov ebx, edx
- and edx, 2
- jz @F
- invoke DrawStringPos, 20, 80, addr eptsupp
- or [VMX_SUPPORT], 10b
- @@:
- mov edx, ebx
- and edx, 80h
- jz @F
- invoke DrawStringPos, 20, 95, addr szUnrestrict
- or [VMX_SUPPORT], 100b
- @@:
- mov edx, ebx
- and edx, 20h
- jz @F
- invoke DrawStringPos, 20, 110, addr vpidsupp
- @@:
- mov edx, ebx
- and edx, 82h ; 1 и 7 бит
- or eax, edx
- mov [vm_mem.ctrl_second_vmx_cpu], eax
- pop rbx
- ret
- endp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement