-
-#ifdef _M_IX86
-EXTERN _KiSystemService:PROC
-#define KUSER_SHARED_SYSCALL HEX(7ffe0300)
-#define KGDT_R0_CODE 8
-MACRO(STUBCODE_U, SyscallId, StackBytes)
- mov eax, SyscallId
- mov ecx, KUSER_SHARED_SYSCALL
- call dword ptr [ecx]
- ret StackBytes
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
- mov eax, SyscallId
- lea edx, [esp + 4]
- pushf
- push KGDT_R0_CODE
- call _KiSystemService
- ret StackBytes
-ENDM
-#elif defined(_M_AMD64)
-EXTERN KiSystemService:PROC
-MACRO(STUBCODE_U, SyscallId, StackBytes)
- mov eax, SyscallId
- mov r10, rcx
- syscall
- ret StackBytes
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
- mov eax, SyscallId
- call KiSystemService
- ret StackBytes
-ENDM
-#elif defined(_M_ARM)
-MACRO(STUBCODE_U, SyscallId, StackBytes)
- swi #SyscallId
- bx lr
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
- mov ip, lr
- swi #SyscallId
- bx ip
-ENDM
-#elif defined(_M_PPC)
-MACRO(STUBCODE_U, SyscallId, StackBytes)
- 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, SyscallId, StackBytes)
- li $8, KUSER_SHARED_SYSCALL
- lw $8,0($8)
- j $8
- nop
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
- j KiSystemService
- nop
-ENDM
-#else
-#error unsupported architecture
-#endif
-
-#ifdef _M_IX86
-MACRO(MAKE_LABEL, Name, Stackbytes)
- PUBLIC _&Name&@&Stackbytes
- _&Name&@&Stackbytes:
-ENDM
-#else
-MACRO(MAKE_LABEL, Name, Stackbytes)
- PUBLIC &Name
- &Name:
-ENDM
-#endif
-
-MACRO(STUB_U, Name, ArgCount)
- Stackbytes = 4 * &ArgCount
- MAKE_LABEL Zw&Name, %Stackbytes
- MAKE_LABEL Nt&Name, %Stackbytes
- STUBCODE_U SyscallId, %Stackbytes
- SyscallId = SyscallId + 1
-ENDM
-
-MACRO(STUB_K, Name, ArgCount)
- Stackbytes = 4 * &ArgCount
- MAKE_LABEL Zw&Name, %Stackbytes
- STUBCODE_K SyscallId, %Stackbytes
- SyscallId = SyscallId + 1
-ENDM
+\r
+#ifdef _M_IX86\r
+#define KUSER_SHARED_SYSCALL HEX(7ffe0300)\r
+#define KGDT_R0_CODE 8\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+ StackBytes = 4 * ArgCount\r
+ FPO 0, 0, 0, 0, 0, FRAME_FPO\r
+ mov eax, SyscallId\r
+ mov ecx, KUSER_SHARED_SYSCALL\r
+ call dword ptr [ecx]\r
+ ret StackBytes\r
+ENDM\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
+ StackBytes = 4 * &ArgCount\r
+ FPO 0, 0, 0, 0, 0, FRAME_FPO\r
+ mov eax, SyscallId\r
+ lea edx, [esp + 4]\r
+ pushfd\r
+ push KGDT_R0_CODE\r
+ call _KiSystemService\r
+ ret StackBytes\r
+ENDM\r
+#elif defined(_M_AMD64)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+ .ENDPROLOG\r
+ mov eax, SyscallId\r
+ mov r10, rcx\r
+ syscall\r
+ ret\r
+ENDM\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
+ .ENDPROLOG\r
+ EXTERN Nt&Name:PROC\r
+ lea rax, Nt&Name[rip]\r
+ mov r10, ArgCount * 8\r
+ jmp KiZwSystemService\r
+ENDM\r
+#elif defined(_M_ARM)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+ swi #SyscallId\r
+ bx lr\r
+ENDM\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
+ mov ip, lr\r
+ swi #SyscallId\r
+ bx ip\r
+ENDM\r
+#elif defined(_M_PPC)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+ stwu 1,-16(1)\r
+ mflr 0\r
+ stw 0,0(1)\r
+ li 0, SyscallId\r
+ sc\r
+ lwz 0,0(1)\r
+ mtlr 0\r
+ addi 1,1,16\r
+ blr\r
+ENDM\r
+#define STUBCODE_K STUBCODE_U\r
+#elif defined(_M_MIPS)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+ li $8, KUSER_SHARED_SYSCALL\r
+ lw $8,0($8)\r
+ j $8\r
+ nop\r
+ENDM\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
+ j KiSystemService\r
+ nop\r
+ENDM\r
+#else\r
+#error unsupported architecture\r
+#endif\r
+\r
+#ifdef _M_IX86\r
+MACRO(MAKE_LABEL, Name, StackBytes)\r
+ PUBLIC _&Name&@&StackBytes\r
+ _&Name&@&StackBytes:\r
+ENDM\r
+MACRO(START_PROC, Name, StackBytes)\r
+ PUBLIC _&Name&@&StackBytes\r
+ .PROC _&Name&@&StackBytes\r
+ENDM\r
+#else\r
+MACRO(MAKE_LABEL, Name, StackBytes)\r
+ PUBLIC &Name\r
+ &Name:\r
+ENDM\r
+MACRO(START_PROC, Name, StackBytes)\r
+ PUBLIC &Name\r
+ .PROC &Name\r
+ENDM\r
+#endif\r
+\r
+MACRO(STUB_U, Name, ArgCount)\r
+ MAKE_LABEL Zw&Name, %ArgCount * 4\r
+ START_PROC Nt&Name, %ArgCount * 4\r
+ STUBCODE_U Name, SyscallId, %ArgCount\r
+ .ENDP\r
+ SyscallId = SyscallId + 1\r
+ENDM\r
+\r
+MACRO(STUB_K, Name, ArgCount)\r
+ START_PROC Zw&Name, %ArgCount * 4\r
+ STUBCODE_K Name, SyscallId, %ArgCount\r
+ .ENDP\r
+ SyscallId = SyscallId + 1\r
+ENDM\r