Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155#ifdef _M_ARM#include <ksarm.h> GBLA SyscallIdSyscallId SETA 0 MACRO STUB_K $Name LCLS ZwFuncName LCLS ZwFuncEndNameZwFuncName 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 ZwFuncEndNameNtFuncName 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 8MACRO(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 StackBytesENDMMACRO(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 StackBytesENDM#elif defined(_M_AMD64)MACRO(STUBCODE_U, Name, SyscallId, ArgCount) .ENDPROLOG mov eax, SyscallId mov r10, rcx syscall retENDMMACRO(STUBCODE_K, Name, SyscallId, ArgCount) .ENDPROLOG EXTERN Nt&Name:PROC lea rax, Nt&Name[rip] mov r10, ArgCount * 8 jmp KiZwSystemServiceENDM#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 blrENDM#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 nopENDMMACRO(STUBCODE_K, Name, SyscallId, ArgCount) j KiSystemService nopENDM#else#error unsupported architecture#endif#ifdef _M_IX86MACRO(MAKE_LABEL, Name, StackBytes) PUBLIC _&Name&@&StackBytes _&Name&@&StackBytes:ENDMMACRO(START_PROC, Name, StackBytes) PUBLIC _&Name&@&StackBytes .PROC _&Name&@&StackBytesENDM#elseMACRO(MAKE_LABEL, Name, StackBytes) PUBLIC &Name &Name:ENDMMACRO(START_PROC, Name, StackBytes) PUBLIC &Name .PROC &NameENDM#endifMACRO(STUB_U, Name, ArgCount) MAKE_LABEL Zw&Name, %ArgCount * 4 START_PROC Nt&Name, %ArgCount * 4 STUBCODE_U Name, SyscallId, %ArgCount .ENDP SyscallId = SyscallId + 1ENDMMACRO(STUB_K, Name, ArgCount) START_PROC Zw&Name, %ArgCount * 4 STUBCODE_K Name, SyscallId, %ArgCount .ENDP SyscallId = SyscallId + 1ENDM#endif