mirror of
https://github.com/momo5502/hypervisor.git
synced 2025-04-19 13:42:55 +00:00
118 lines
2.5 KiB
NASM
118 lines
2.5 KiB
NASM
include ksamd64.inc
|
|
|
|
.code
|
|
|
|
; -----------------------------------------------------
|
|
|
|
LEAF_ENTRY _str, _TEXT$00
|
|
str word ptr [rcx]
|
|
ret
|
|
LEAF_END _str, _TEXT$00
|
|
|
|
; -----------------------------------------------------
|
|
|
|
LEAF_ENTRY _sldt, _TEXT$00
|
|
sldt word ptr [rcx]
|
|
ret
|
|
LEAF_END _sldt, _TEXT$00
|
|
|
|
; -----------------------------------------------------
|
|
|
|
LEAF_ENTRY __lgdt, _TEXT$00
|
|
lgdt fword ptr [rcx]
|
|
ret
|
|
LEAF_END __lgdt, _TEXT$00
|
|
|
|
; -----------------------------------------------------
|
|
|
|
LEAF_ENTRY __invept, _TEXT$00
|
|
invept rcx, OWORD PTR [rdx]
|
|
ret
|
|
LEAF_END __invept, _TEXT$00
|
|
|
|
; -----------------------------------------------------
|
|
|
|
LEAF_ENTRY restore_context, _TEXT$00
|
|
movaps xmm0, CxXmm0[rcx]
|
|
movaps xmm1, CxXmm1[rcx]
|
|
movaps xmm2, CxXmm2[rcx]
|
|
movaps xmm3, CxXmm3[rcx]
|
|
movaps xmm4, CxXmm4[rcx]
|
|
movaps xmm5, CxXmm5[rcx]
|
|
movaps xmm6, CxXmm6[rcx]
|
|
movaps xmm7, CxXmm7[rcx]
|
|
movaps xmm8, CxXmm8[rcx]
|
|
movaps xmm9, CxXmm9[rcx]
|
|
movaps xmm10, CxXmm10[rcx]
|
|
movaps xmm11, CxXmm11[rcx]
|
|
movaps xmm12, CxXmm12[rcx]
|
|
movaps xmm13, CxXmm13[rcx]
|
|
movaps xmm14, CxXmm14[rcx]
|
|
movaps xmm15, CxXmm15[rcx]
|
|
ldmxcsr CxMxCsr[rcx]
|
|
|
|
mov rax, CxRax[rcx]
|
|
mov rdx, CxRdx[rcx]
|
|
mov r8, CxR8[rcx]
|
|
mov r9, CxR9[rcx]
|
|
mov r10, CxR10[rcx]
|
|
mov r11, CxR11[rcx]
|
|
|
|
mov rbx, CxRbx[rcx]
|
|
mov rsi, CxRsi[rcx]
|
|
mov rdi, CxRdi[rcx]
|
|
mov rbp, CxRbp[rcx]
|
|
mov r12, CxR12[rcx]
|
|
mov r13, CxR13[rcx]
|
|
mov r14, CxR14[rcx]
|
|
mov r15, CxR15[rcx]
|
|
|
|
cli
|
|
push CxEFlags[rcx]
|
|
popfq
|
|
mov rsp, CxRsp[rcx]
|
|
push CxRip[rcx]
|
|
mov rcx, CxRcx[rcx]
|
|
ret
|
|
LEAF_END restore_context, _TEXT$00
|
|
|
|
; -----------------------------------------------------
|
|
|
|
extern vm_exit_handler:proc
|
|
extern vm_launch_handler:proc
|
|
extern RtlCaptureContext:proc
|
|
|
|
; -----------------------------------------------------
|
|
|
|
vm_launch PROC
|
|
mov rcx, rsp
|
|
sub rsp, 30h
|
|
jmp vm_launch_handler
|
|
vm_launch ENDP
|
|
|
|
; -----------------------------------------------------
|
|
|
|
vm_exit PROC
|
|
; Load CONTEXT pointer
|
|
push rcx
|
|
lea rcx, [rsp+8h]
|
|
|
|
sub rsp, 30h ; Home-space
|
|
call RtlCaptureContext
|
|
add rsp, 30h
|
|
|
|
mov rcx, [rsp+CxRsp+8h]
|
|
add rcx, 8h ; Fixup push rcx
|
|
add rcx, 30h ; Fixup home-space
|
|
mov [rsp+CxRsp+8h], rcx
|
|
|
|
pop rcx
|
|
mov [rsp+CxRcx], rcx
|
|
|
|
mov rcx, rsp
|
|
sub rsp, 30h
|
|
jmp vm_exit_handler
|
|
vm_exit ENDP
|
|
|
|
end
|