热门问题
时间线
聊天
视角

线程信息块

来自维基百科,自由的百科全书

Remove ads

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

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

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

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

Remove ads

TIB的内容

更多信息 字节/ 类型, 偏移 (32 比特, FS) ...
Remove ads

访问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
}
Remove ads

参见

参考文献

Loading content...

进一步阅读

Loading content...

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads