[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:...
Jérôme Gardou
jerome.gardou at reactos.org
Wed Feb 4 17:40:22 UTC 2015
Not really. They still could use the same trampoline mechanism, with a
function pointer to some kind of user-mode dispatcher, like we and
windows do with the syscall dispatcher. They just understandably don't
care enough to do it.
Le 04/02/2015 18:36, Hermès BÉLUSCA - MAÏTO a écrit :
> 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
>
> _______________________________________________
> 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