cheat-engine/dbvm/common/commona.asm
2018-02-20 13:08:24 +01:00

158 lines
2.2 KiB
NASM
Executable file

bits 32
;------------------;
;ULONG getESP(void);
;------------------;
global getESP
getESP:
mov eax,esp
add eax,4 ;for the push of the call
ret
;-----------------;
;inportb(int port); returns a byte from the given port
;-----------------;
global inportb
inportb:
push ebp
mov ebp,esp
mov edx,[ebp+8]
in al,dx
pop ebp
ret ;4 ; (no params, in cdecl frees the caller)
;----------------------------------------------------------;
;void cpuid(ULONG *eax, ULONG *ebx, ULONG *ecx, ULONG *edx);
;----------------------------------------------------------;
global _cpuid
_cpuid:
push ebp
mov ebp,esp ;ebp=free to use, ebp+4 is address of caller, +8 is param1
push eax
push ebx
push ecx
push edx
mov eax,[ebp+8]
mov eax,[eax]
mov ebx,[ebp+12]
mov ebx,[ebx]
mov ecx,[ebp+16]
mov ecx,[ecx]
mov edx,[ebp+20]
mov edx,[edx]
cpuid
push ebx
mov ebx,eax
mov eax,[ebp+8] ;eax
mov [eax],ebx
pop ebx
mov eax,[ebp+12] ;ebx
mov [eax],ebx
mov eax,[ebp+16] ;ecx
mov [eax],ecx
mov eax,[ebp+20] ;edx
mov [eax],edx
pop edx
pop ecx
pop ebx
pop eax
mov esp,ebp
pop ebp
ret ;16
;---------------------------;
;void spinlock(int *lockvar);
;---------------------------;
global spinlock
spinlock:
push ebp
mov ebp,esp
push ebx
mov ebx,[ebp+8] ;ebx now contains the address of the lock
spinlock_loop:
;serialize
pushad
xor eax,eax
cpuid ;serialize
popad
;check lock
cmp dword [ebx],0
je spinlock_getlock
pause
jmp spinlock_loop
spinlock_getlock:
mov eax,1
xchg eax,[ebx] ;try to lock
cmp eax,0 ;test if successful
jne spinlock_loop
pop ebx
pop ebp
ret ;4
;-----------------------------------------;
;void outportb(short int port, char value);
;-----------------------------------------;
global outportb
outportb:
push ebp
mov ebp,esp
mov edx,[ebp+8] ;port
mov eax,[ebp+12] ;value
out dx,al
pop ebp
ret ;8
;--------------------;
;void showstate(void);
;--------------------;
global showstate
extern showstatec
showstate:
pushad ;+4
pushfd ;+32
mov eax,cr0
push eax ;+4
;mov eax,cr1
mov eax,0
push eax ;+4
mov eax,cr2
push eax ;+4
mov eax,cr3
push eax ;+4
sub esp,8
sgdt [esp]
mov eax,[esp+2]
add esp,8
push eax ;+4
sub esp,8
sidt [esp]
mov eax,[esp+2]
add esp,8
push eax ;+4
push esp ;+4
call showstatec
add esp,4+32+4+4+4+4+4+4+4
ret