57 lines
908 B
NASM
57 lines
908 B
NASM
|
P_STACKBASE equ 0
|
||
|
GSREG equ P_STACKBASE
|
||
|
FSREG equ GSREG + 4
|
||
|
ESREG equ FSREG + 4
|
||
|
DSREG equ ESREG + 4
|
||
|
EDIREG equ DSREG + 4
|
||
|
ESIREG equ EDIREG + 4
|
||
|
EBPREG equ ESIREG + 4
|
||
|
KERNELESPREG equ EBPREG + 4
|
||
|
EBXREG equ KERNELESPREG + 4
|
||
|
EDXREG equ EBXREG + 4
|
||
|
ECXREG equ EDXREG + 4
|
||
|
EAXREG equ ECXREG + 4
|
||
|
RETADR equ EAXREG + 4
|
||
|
EIPREG equ RETADR + 4
|
||
|
CSREG equ EIPREG + 4
|
||
|
EFLAGSREG equ CSREG + 4
|
||
|
ESPREG equ EFLAGSREG + 4
|
||
|
SSREG equ ESPREG + 4
|
||
|
P_STACKTOP equ SSREG + 4
|
||
|
P_LDT_SEL equ P_STACKTOP
|
||
|
P_LDT equ P_LDT_SEL + 2
|
||
|
TSS3_S_SP0 equ 4
|
||
|
|
||
|
extern _KeTSS
|
||
|
extern _PStartProcess
|
||
|
|
||
|
|
||
|
global __asm_KeLoadTSS;
|
||
|
global __asm_Restart;
|
||
|
|
||
|
__asm_KeLoadTSS:
|
||
|
push ebp
|
||
|
mov ebp,esp
|
||
|
push eax
|
||
|
;mov eax,dword [ss:ebp+8]
|
||
|
mov eax,56
|
||
|
ltr ax
|
||
|
pop eax
|
||
|
mov esp,ebp
|
||
|
pop ebp
|
||
|
ret
|
||
|
|
||
|
|
||
|
__asm_Restart:
|
||
|
mov esp,[_PStartProcess]
|
||
|
lea eax,[esp+P_STACKTOP]
|
||
|
mov dword [_KeTSS+TSS3_S_SP0],eax
|
||
|
|
||
|
pop gs
|
||
|
pop fs
|
||
|
pop es
|
||
|
pop ds
|
||
|
popad
|
||
|
add esp,4
|
||
|
iretd
|