[PATCH 3/3] ntdll: For Mac 64-bit, poke NtCurrentTeb()->ThreadLocalStoragePointer to the corresponding offset from %gs.

Sebastian Lackner sebastian at fds-team.de
Wed Jul 27 11:06:53 CDT 2016


On 27.07.2016 17:42, Ken Thomases wrote:
> 64-bit Windows apps have hard-coded accesses to %gs:0x58 baked into them.  They
> need to find the ThreadLocalStoragePointer there.
> 
> Technically, the gsbase register and the memory it points to belong to the
> pthread implementation on macOS.  It's used for the pthread TLS implementation.
> Slot 11 (offset 0x58) is currently used for the implementation of the ttyname()
> system library function.  We do not anticipate that Wine or any of the system
> libraries or frameworks it uses will call ttyname().  Furthermore, Apple has
> made it so that future releases of macOS will no longer use that slot.  So, we
> hijack it for our purposes.
> 
> Signed-off-by: Ken Thomases <ken at codeweavers.com>
> ---
>  dlls/ntdll/loader.c        | 11 +++++++-
>  dlls/ntdll/signal_x86_64.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 72 insertions(+), 1 deletion(-)

I'm not sure if I correctly understand the purpose of this patch. If you have to
set %gs:0x58 to some specific value, why not just use an assembly instruction for that?




More information about the wine-devel mailing list