[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