mirror of
https://github.com/reactos/reactos.git
synced 2024-08-28 14:18:41 +00:00
155 lines
2.8 KiB
PHP
155 lines
2.8 KiB
PHP
|
|
#ifdef _M_ARM
|
|
|
|
#include <ksarm.h>
|
|
|
|
GBLA SyscallId
|
|
|
|
SyscallId SETA 0
|
|
|
|
MACRO
|
|
STUB_K $Name
|
|
LCLS ZwFuncName
|
|
LCLS ZwFuncEndName
|
|
ZwFuncName SETS "Zw$Name"
|
|
ZwFuncEndName SETS "$ZwFuncName":CC:"_end"
|
|
ALIGN 2
|
|
EXPORT $ZwFuncName [FUNC]
|
|
$ZwFuncName
|
|
ROUT
|
|
mov r12, #SyscallId
|
|
svc #1
|
|
bx lr
|
|
$ZwFuncEndName
|
|
MEND
|
|
|
|
MACRO
|
|
STUB_U $Name
|
|
LCLS NtFuncName
|
|
LCLS NtFuncEndName
|
|
LCLS ZwFuncName
|
|
LCLS ZwFuncEndName
|
|
NtFuncName SETS "Nt$Name"
|
|
NtFuncEndName SETS "$NtFuncName":CC:"_end"
|
|
ZwFuncName SETS "Zw$Name"
|
|
ZwFuncEndName SETS "$ZwFuncName":CC:"_end"
|
|
ALIGN 2
|
|
EXPORT $NtFuncName [FUNC]
|
|
$NtFuncName
|
|
EXPORT $ZwFuncName [FUNC]
|
|
$ZwFuncName
|
|
ROUT
|
|
mov r12, #SyscallId
|
|
svc #1
|
|
bx lr
|
|
$NtFuncEndName
|
|
$ZwFuncEndName
|
|
MEND
|
|
|
|
#else
|
|
|
|
#include <asm.inc>
|
|
|
|
SyscallId = 0
|
|
|
|
#ifdef _M_IX86
|
|
#define KUSER_SHARED_SYSCALL HEX(7ffe0300)
|
|
#define KGDT_R0_CODE 8
|
|
MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
|
|
StackBytes = 4 * ArgCount
|
|
FPO 0, 0, 0, 0, 0, FRAME_FPO
|
|
mov eax, SyscallId
|
|
mov edx, KUSER_SHARED_SYSCALL
|
|
call dword ptr [edx]
|
|
ret StackBytes
|
|
ENDM
|
|
MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
|
|
StackBytes = 4 * &ArgCount
|
|
FPO 0, 0, 0, 0, 0, FRAME_FPO
|
|
mov eax, SyscallId
|
|
lea edx, [esp + 4]
|
|
pushfd
|
|
push KGDT_R0_CODE
|
|
call _KiSystemService
|
|
ret StackBytes
|
|
ENDM
|
|
#elif defined(_M_AMD64)
|
|
MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
|
|
.ENDPROLOG
|
|
mov eax, SyscallId
|
|
mov r10, rcx
|
|
syscall
|
|
ret
|
|
ENDM
|
|
MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
|
|
.ENDPROLOG
|
|
EXTERN Nt&Name:PROC
|
|
lea rax, Nt&Name[rip]
|
|
mov r10, ArgCount * 8
|
|
jmp KiZwSystemService
|
|
ENDM
|
|
#elif defined(_M_PPC)
|
|
MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
|
|
stwu 1,-16(1)
|
|
mflr 0
|
|
stw 0,0(1)
|
|
li 0, SyscallId
|
|
sc
|
|
lwz 0,0(1)
|
|
mtlr 0
|
|
addi 1,1,16
|
|
blr
|
|
ENDM
|
|
#define STUBCODE_K STUBCODE_U
|
|
#elif defined(_M_MIPS)
|
|
MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
|
|
li $8, KUSER_SHARED_SYSCALL
|
|
lw $8,0($8)
|
|
j $8
|
|
nop
|
|
ENDM
|
|
MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
|
|
j KiSystemService
|
|
nop
|
|
ENDM
|
|
#else
|
|
#error unsupported architecture
|
|
#endif
|
|
|
|
#ifdef _M_IX86
|
|
MACRO(MAKE_LABEL, Name, StackBytes)
|
|
PUBLIC _&Name&@&StackBytes
|
|
_&Name&@&StackBytes:
|
|
ENDM
|
|
MACRO(START_PROC, Name, StackBytes)
|
|
PUBLIC _&Name&@&StackBytes
|
|
.PROC _&Name&@&StackBytes
|
|
ENDM
|
|
#else
|
|
MACRO(MAKE_LABEL, Name, StackBytes)
|
|
PUBLIC &Name
|
|
&Name:
|
|
ENDM
|
|
MACRO(START_PROC, Name, StackBytes)
|
|
PUBLIC &Name
|
|
.PROC &Name
|
|
ENDM
|
|
#endif
|
|
|
|
MACRO(STUB_U, Name, ArgCount)
|
|
MAKE_LABEL Zw&Name, %ArgCount * 4
|
|
START_PROC Nt&Name, %ArgCount * 4
|
|
STUBCODE_U Name, SyscallId, %ArgCount
|
|
.ENDP
|
|
SyscallId = SyscallId + 1
|
|
ENDM
|
|
|
|
MACRO(STUB_K, Name, ArgCount)
|
|
START_PROC Zw&Name, %ArgCount * 4
|
|
STUBCODE_K Name, SyscallId, %ArgCount
|
|
.ENDP
|
|
SyscallId = SyscallId + 1
|
|
ENDM
|
|
|
|
#endif
|