Uh, sorry for the horriblly long diff. I guess someone initially committed the file with CRLF file endings :-/
Le 04/02/2015 17:58, jgardou@svn.reactos.org a écrit :
Author: jgardou Date: Wed Feb 4 16:58:41 2015 New Revision: 66161
URL: http://svn.reactos.org/svn/reactos?rev=66161&view=rev Log: [NTDLL]
- use the edx register to store the function pointer to the syscall trampoline.
This is how google Chrome checks if an exported function is a system call or not. See https://chromium.googlesource.com/chromium/src.git/+/master/sandbox/win/src/... and https://bugs.winehq.org/show_bug.cgi?id=21232 for details
Modified: trunk/reactos/include/asm/syscalls.inc
Modified: trunk/reactos/include/asm/syscalls.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/asm/syscalls.inc?re... ============================================================================== --- trunk/reactos/include/asm/syscalls.inc [iso-8859-1] (original) +++ trunk/reactos/include/asm/syscalls.inc [iso-8859-1] Wed Feb 4 16:58:41 2015 @@ -1,109 +1,109 @@
-#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 ecx, KUSER_SHARED_SYSCALL
- call dword ptr [ecx]
- 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_ARM) -MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- swi #SyscallId
- bx lr
-ENDM -MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- mov ip, lr
- swi #SyscallId
- bx ip
-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
+#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_ARM) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- swi #SyscallId
- bx lr
+ENDM +MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- mov ip, lr
- swi #SyscallId
- bx ip
+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