[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:...
Timo Kreuzer
timo.kreuzer at web.de
Fri Feb 6 09:46:17 UTC 2015
But you are aware, that it was you, who wrote the previous code, yes?
http://svn.reactos.org/svn/reactos?view=revision&revision=13090
Author: ion
Date: Mon Jan 17 07:10:34 2005 UTC /(10 years ago)/
Changed paths: *28*
Log Message:
SYSENTER support, INT2E Optimization, new Syscall Table/Stub generator and svn:ignore fixes. Please read associated Mailing List Post.
44 /*
45 * This stubs calls into KUSER_SHARED_DATA where either a
46 * sysenter or interrupt is performed, depending on CPU support.
47 */
48 #define UserModeStub_x86 " movl $0x%x, %%eax\n" \
49 " movl $KUSER_SHARED_SYSCALL, %%ecx\n" \
50 " call *%%ecx\n" \
51 " ret $0x%x\n\n"
This must have been shortly before "almost a decade now" ;-)
Also there is a difference between "We must copy these 5 documented asm
instructions, because we know otherwise app xyz breaks" and "let's just
copy this and that and that as well, because there might be an
application out there that relies on this exact sequence of
instructions, for whatever reason that we cannot even imagine"
Am 06.02.2015 um 07:00 schrieb Alex Ionescu:
> Wow, it almost sounds like... we have to copy the exact same assembly
> code from Microsoft... instead of being "more efficient" or "doing it
> our way" because "there's no point in copying such minute details".
> It..almost sounds like... something some developer was saying for
> almost a decade now? No, I must be imagining things...
>
> Best regards,
> Alex Ionescu
>
> On Wed, Feb 4, 2015 at 8:58 AM, <jgardou at svn.reactos.org
> <mailto:jgardou at svn.reactos.org>> wrote:
>
> 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/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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.reactos.org/pipermail/ros-dev/attachments/20150206/9e2f38f9/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3683 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://www.reactos.org/pipermail/ros-dev/attachments/20150206/9e2f38f9/attachment-0001.bin>
More information about the Ros-dev
mailing list