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-boun...@reactos.org] De la part de Jérôme Gardou
> Envoyé : mercredi 4 février 2015 18:02
> À : ros-dev@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, jgar...@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@reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
> 
> _______________________________________________
> Ros-dev mailing list
> Ros-dev@reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
> 

_______________________________________________
Ros-dev mailing list
Ros-dev@reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to