271 lines
2.5 KiB
NASM
271 lines
2.5 KiB
NASM
|
|
.code
|
|
|
|
_text SEGMENT
|
|
|
|
ReadSsQ PROC
|
|
|
|
db 36h,48h, 08bh, 01h
|
|
ret
|
|
|
|
ReadSsQ ENDP
|
|
|
|
AsmInt2F PROC
|
|
|
|
int 2Fh
|
|
ret
|
|
|
|
AsmInt2F ENDP
|
|
|
|
AsmIntE1 PROC
|
|
|
|
int 0E1h
|
|
ret
|
|
|
|
AsmIntE1 ENDP
|
|
|
|
AsmRdtsc PROC
|
|
|
|
rdtsc
|
|
and rax,0FFFFFFFFh
|
|
and rdx,0FFFFFFFFh
|
|
rol rdx,32
|
|
or rax,rdx
|
|
ret
|
|
|
|
AsmRdtsc ENDP
|
|
|
|
AsmGetRFlags PROC
|
|
|
|
pushfq
|
|
pop rax
|
|
ret
|
|
|
|
AsmGetRFlags ENDP
|
|
|
|
AsmGetRSP PROC
|
|
|
|
mov rax,rsp
|
|
add rax,8
|
|
ret
|
|
|
|
AsmGetRSP ENDP
|
|
|
|
AsmReadCr0 PROC
|
|
mov rax,cr0
|
|
ret
|
|
AsmReadCr0 ENDP
|
|
|
|
AsmReadCr2 PROC
|
|
mov rax,cr2
|
|
ret
|
|
AsmReadCr2 ENDP
|
|
|
|
AsmReadCr3 PROC
|
|
mov rax,cr3
|
|
ret
|
|
AsmReadCr3 ENDP
|
|
|
|
AsmReadCr4 PROC
|
|
mov rax,cr4
|
|
ret
|
|
AsmReadCr4 ENDP
|
|
|
|
AsmReadCr8 PROC
|
|
mov rax,cr8
|
|
ret
|
|
AsmReadCr8 ENDP
|
|
|
|
AsmReadMsr PROC
|
|
|
|
and rcx,0FFFFFFFFh
|
|
rdmsr
|
|
and rax,0FFFFFFFFh
|
|
and rdx,0FFFFFFFFh
|
|
rol rdx,32
|
|
or rax,rdx
|
|
ret
|
|
|
|
AsmReadMsr ENDP
|
|
|
|
AsmWriteMsr PROC
|
|
|
|
and rcx,0FFFFFFFFh
|
|
mov eax,edx
|
|
shr rdx,32
|
|
wrmsr
|
|
ret
|
|
|
|
AsmWriteMsr ENDP
|
|
|
|
AsmReadGs PROC
|
|
|
|
mov rax,gs:[rcx]
|
|
ret
|
|
|
|
AsmReadGs ENDP
|
|
|
|
AsmWriteCr4 PROC
|
|
mov cr4,rcx
|
|
ret
|
|
AsmWriteCr4 ENDP
|
|
|
|
AsmWriteCr0 PROC
|
|
mov cr0,rcx
|
|
ret
|
|
AsmWriteCr0 ENDP
|
|
|
|
AsmWriteCr8 PROC
|
|
mov cr8,rcx
|
|
ret
|
|
AsmWriteCr8 ENDP
|
|
|
|
AsmCpuid PROC
|
|
;rcx=eax rdx=ecx r8=pcpuidret
|
|
|
|
push rbx
|
|
push r11
|
|
|
|
mov r11,r8
|
|
|
|
mov eax,ecx
|
|
mov ecx,edx
|
|
cpuid
|
|
mov dword ptr[r11],eax
|
|
mov dword ptr[r11+4],ebx
|
|
mov dword ptr[r11+8],ecx
|
|
mov dword ptr[r11+12],edx
|
|
|
|
pop r11
|
|
pop rbx
|
|
ret
|
|
|
|
AsmCpuid ENDP
|
|
|
|
AsmGetLDTR PROC
|
|
sldt ax
|
|
ret
|
|
AsmGetLDTR ENDP
|
|
|
|
AsmGetEs PROC
|
|
|
|
xor rax,rax
|
|
mov ax,es
|
|
ret
|
|
|
|
AsmGetEs ENDP
|
|
|
|
AsmGetCs PROC
|
|
|
|
xor rax,rax
|
|
mov ax,cs
|
|
ret
|
|
|
|
AsmGetCs ENDP
|
|
|
|
AsmGetDs PROC
|
|
|
|
xor rax,rax
|
|
mov ax,ds
|
|
ret
|
|
|
|
AsmGetDs ENDP
|
|
|
|
AsmGetFs PROC
|
|
|
|
xor rax,rax
|
|
mov ax,fs
|
|
ret
|
|
|
|
AsmGetFs ENDP
|
|
|
|
AsmGetGs PROC
|
|
|
|
xor rax,rax
|
|
mov ax,gs
|
|
ret
|
|
|
|
AsmGetGs ENDP
|
|
|
|
AsmGetSs PROC
|
|
|
|
xor rax,rax
|
|
mov ax,ss
|
|
ret
|
|
|
|
AsmGetSs ENDP
|
|
|
|
AsmGetTr PROC
|
|
xor rax,rax
|
|
str rax
|
|
ret
|
|
AsmGetTr ENDP
|
|
|
|
AsmGetIdtBase PROC
|
|
sub rsp,10h
|
|
sidt qword ptr[rsp]
|
|
mov rax,qword ptr[rsp+2]
|
|
add rsp,10h
|
|
ret
|
|
AsmGetIdtBase ENDP
|
|
|
|
AsmGetIdtLimit PROC
|
|
sub rsp,10h
|
|
sidt qword ptr[rsp]
|
|
xor rax,rax
|
|
mov ax,word ptr[rsp]
|
|
add rsp,10h
|
|
ret
|
|
AsmGetIdtLimit ENDP
|
|
|
|
AsmGetGdtBase PROC
|
|
sub rsp,10h
|
|
sgdt qword ptr[rsp]
|
|
mov rax,qword ptr[rsp+2]
|
|
add rsp,10h
|
|
ret
|
|
AsmGetGdtBase ENDP
|
|
|
|
AsmGetGdtLimit PROC
|
|
sub rsp,10h
|
|
sgdt qword ptr[rsp]
|
|
xor rax,rax
|
|
mov ax,word ptr[rsp]
|
|
add rsp,10h
|
|
ret
|
|
AsmGetGdtLimit ENDP
|
|
|
|
AsmGetDr7 PROC
|
|
|
|
xor rax,rax
|
|
mov rax,dr7
|
|
ret
|
|
|
|
AsmGetDr7 ENDP
|
|
|
|
AsmSti Proc
|
|
sti
|
|
ret
|
|
AsmSti Endp
|
|
|
|
AsmCli Proc
|
|
cli
|
|
ret
|
|
AsmCli Endp
|
|
|
|
AsmLoadAccessRightsByte PROC
|
|
lar rax, rcx
|
|
ret
|
|
AsmLoadAccessRightsByte ENDP
|
|
|
|
AsmInvpcid Proc
|
|
|
|
invpcid rcx,oword ptr[rdx]
|
|
ret
|
|
|
|
AsmInvpcid Endp
|
|
|
|
_text ENDS
|
|
|
|
END
|