[ros-dev] [ros-diffs] [jgardou] 66161: [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:...
Hermès BÉLUSCA - MAÏTO
hermes.belusca at sfr.fr
Wed Feb 4 17:36:44 UTC 2015
About the Wine bug report...: "ils l'ont dans le XXX" ?
-----Message d'origine-----
De : Ros-dev [mailto:ros-dev-bounces at reactos.org] De la part de Jérôme Gardou
Envoyé : mercredi 4 février 2015 18:02
À : ros-dev at reactos.org
Objet : Re: [ros-dev] [ros-diffs] [jgardou] 66161: [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:...
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 at 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/wi
> n/src/service_resolver_32.cc 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?rev=66161&r1=66160&r2=66161&view=diff
> ==============================================================================
> --- 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
>
>
_______________________________________________
Ros-dev mailing list
Ros-dev at reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev
More information about the Ros-dev
mailing list