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