热门问题
时间线
聊天
视角
线程信息块
来自维基百科,自由的百科全书
Remove ads
Win32线程信息块(TIB)是32位Windows操作系统的线程使用的数据结构,存储了每个线程的运行时信息。 也称作“线程环境块”(Thread Environment Block,TEB)。[1]
此條目需要补充更多来源。 (2019年1月12日) |
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的内容
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
参见
参考文献
进一步阅读
外部链接
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads