概述
1625-5 王子昂 总结《2017年11月24日》 【连续第420天总结】
A. TEB(线程环境块)
B.
介绍
该结构体中包含进程中运行线程的各种信息,每个线程都对应一个TEB结构体。
不同OS中TEB结构的形态略微不同。
定义
结构体中有非常多的成员,其中用户模式调试中起着重要作用的成员有两个:
+0 NtTib : _NT_TIB
...
+0X30 ProcessEnvironmentBlock : Ptr32_PEB
偏移0x30处的ProcessEnvironmentBlock是指向PEB(进程环境块)结构体的指针
偏移0处的_NT_TIB结构体内容如下
typedef struct _NT_TIB {
struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
PVOID StackBase;
PVOID StackLimit;
PVOID SubSystemTib;
union {
PVOID FiberData;
DWORD Version;
};
PVOID ArbitraryUserPointer;
struct _NT_TIB *Self;
};
ExceptionList成员指向_EXCEPTION_REGISTRATION_RECORD结构体组成的链表,用于Windows OS的SEH(异常处理机制)
Self成员是结构体的自引用指针
访问方法
内核模式下可以直接查看内核的内存,但是用户模式下由于没有相关权限,所以只能通过OS提供的API来访问
Ntdll.NtCurrentTeb()
用来返回当前线程的TEB结构体的地址
函数体:
mov eax, DWORD PTR FS:[18]
RETN
FS段寄存器
FS段寄存器就是专门用来指示当前线程的TEB结构体的
具体方法为
FS寄存器指示SDT的索引,其中存放着TEB结构体的地址
SDT位于内核内存区域,地址存放在GDTR(全局描述符表寄存器)中
因此GDTR+FS就可以得到TEB结构体的指针了
从而有
FS:[0x18] = FS:0
(+0x18处就是self指针)
FS:[0x30] = &PEB
FS:[0] = &SEH
C. 明日计划
线程环境块PEB
最后
以上就是悲凉电灯胆为你收集整理的171124 逆向-线程环境块(TEB)的全部内容,希望文章能够帮你解决171124 逆向-线程环境块(TEB)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复