次のような、TIB で動作する Win32 API 関数の実装を掘り下げます。
- TLS アクセス機能:
TlsAlloc
、TlsFree
、TlsSetValue
、TlsGetValue
GetLastError
、SetLastError
- メッセージング サブシステム:
GetMessage
などPeekMessage
。
fs:[0x18]
セレクターの内容を読み取ることによって、それらすべてが TIB (TEB と呼ばれることもあります) にアクセスすることがわかります。
OTOH fs
registerが直接指しているので、これは不要です。この記事と私が実際に見たものによると、registerfs
は TIB 構造の先頭へのアドレスを保持しますが、オフセット 0x18 にはそれ自体へのポインターがあります。
それにもかかわらず、TIB に間接的にアクセスする理由は何でしょうか?