线程信息块

Win32线程信息块（TIB）是32位Windows操作系统的线程使用的数据结构，存储了每个线程的运行时信息。 也称作“线程环境块”（Thread Environment Block，TEB）。

Windows NT系列的DDK在winnt.h中包括了一个struct NT_TIB，为独立于subsystem的部分。Wine包含了TIB与subsystem相关的扩展部分。由于非常多程序使用了TIB，事实上TIB成为Windows API的一部分。

TIB可用于获取很多进程相关信息，而不必调用Win32 API。例如，模拟GetLastError()或GetVersion()。通过PEB可以获取访问导入表（import table， IAT）、进程启动参数、程序名字等。

32位程序通过FS段寄存器，64位程序通过GS段寄存器可以获得TIB

TIB的内容

访问TIB
  

// gcc (AT&T-style inline assembly).
void *getTIB() {
    void *pTIB;
    __asm__("movl %%fs:0x18, %0" : "=r" (pTIB) : : );
    return pTIB;
}

// Microsoft C
__declspec(naked)
void *getTIB() {
    __asm mov EAX, FS:[18h]
}

// Using Microsoft's intrinsics instead of inline assembly (works for both X86 and X64 architectures)
void *getTIB() {
#ifdef _M_IX86
    return (void *)__readfsdword(0x18);
#elif _M_AMD64
    return (void *)__readgsqword(0x30);
#endif
}

参见
 结构化异常

参考文献

进一步阅读

外部链接
 TEB layout on NTinternals.net 
 Structured Exception Handling and the TIB 
 Description of the first slots of the TIB 
 Description of TEB, field by field 

微軟API
執行緒