深入研究使用 TIB 的 Win32 API 函数的实现,例如:
- TLS 访问函数:
TlsAlloc
,TlsFree
,TlsSetValue
,TlsGetValue
GetLastError
,SetLastError
- 消息传递子系统:
GetMessage
等PeekMessage
。
人们发现他们都通过读取fs:[0x18]
选择器的内容来访问 TIB(有时称为 TEB)。
OTOH 这是不必要的,因为fs
register直接指向它。根据这篇文章和我在实践中看到的,fs
寄存器保存指向 TIB 结构开头的地址,而在偏移量 0x18 处,它有指向自身的指针。
然而,间接访问 TIB 的原因可能是什么?