我是靠谱客的博主 悲凉电灯胆,最近开发中收集的这篇文章主要介绍171124 逆向-线程环境块(TEB),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部