gpt4 book ai didi

c - Win32 中的 TIB 访问

转载 作者:可可西里 更新时间:2023-11-01 10:08:05 30 4
gpt4 key购买 nike

深入研究与 TIB(线程信息 block )一起工作的 Win32 API 函数的实现,例如:

  • TLS 访问函数:TlsAllocTlsFreeTlsSetValueTlsGetValue
  • GetLastError, SetLastError
  • 消息子系统:GetMessagePeekMessage

通过读取 fs:[0x18] 选择器的内容,我们发现它们都访问了 TIB,有时称为 TEB(线程环境 block )。

OTOH 这是不必要的,因为fs 寄存器直接 指向它。根据this article我在实践中看到的是,fs 寄存器保存了 TIB 结构开头的地址,而在偏移量 0x18 处它有一个指向自身的指针。

间接访问 TIB 的原因可能是什么?

最佳答案

任何使用 FS 的指令都需要一个覆盖,它会向指令添加一个字节(通常需要汇编语言才能使用它)。 FS:18 处的指针(至少在内存正确运行的情况下)是基于 DS 的,因此它可以在没有覆盖的情况下使用,在使用时节省一个字节并且(对许多人来说最重要的是)可以直接从更高级别的语言(例如 C 或 C++)使用,而不需要汇编语言。

关于c - Win32 中的 TIB 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964236/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com