第46章:TEB

TEB(Thread Environment Block,线程环境块),此结构体包含进程中运行的线程的各种信息,进程中的每个线程都对应一个 TEB 结构体

由于微软的符号服务器无法正常访问,因此在没有符号的情况下,无法查看自己系统中 TEB 结构体。

TEB 结构体成员众多且结构复杂,在用户模式下起着重要作用的成员有2个:

ProcessEnvironmentBlock 成员指向 PEB (进程环境块)。NT_TIB(TIB 是 Thread Information Block 的简称):

TEB 访问方法——通过 Ntdll.CurrentTeb() API 来返回当前线程的 TEB 结构体地址

 

返回的 FS:[18] 指向 7FFDF000 ,即 TEB 的首地址。

FS 段寄存器

FS段寄存器用来指示当前线程的 TEB 结构体。IA-32 中进程的虚拟内存为 4GB ,但寄存器大小只有16位,因此 FS 寄存器持有 SDT 的索引,而该索引持有实际的 TEB 地址。

通过访问 GDTR 获得 GDT(SDT 即段描述符表,是 GDT 的一个数据结构项) 的入口地址从而访问到 TEB,因此 FS 寄存器也叫段选择符。

FS:[18] 表示  TEB 起始地址,FS:[30] 表示 PEB 起始地址,FS:[0] 表示 SEH 起始地址。

原文地址:https://www.cnblogs.com/Rev-omi/p/13580537.html