之前的笔记搬运
0x1 什么是TEB与PEB
TEB: 全称Thread Environment Block, 线程环境块
PEB: 全称Process Environment Block, 进程环境块
在TEB和PEB里分别指向了一个结构体, 结构体了记录了当前运行中线程和进程的一些信息
0x2 如何访问TEB与PEB
32位程序在OD或WinDbg调试状态中可以发现段寄存器增加了2个,而其中的一个fs段寄存器就是用于访问这两个环境块设置的
fs指向一个 _NT_TIB结构体首部 + 18的位置取内容得到一个指针, 指向TEB, 而TEB +
30的位置取内容就是指向PEB
具体的访问:
mov eax, fs:[18] ;TEB
mov eax, [eax+30] ; PEB
然而其实本身[fs+18]的地址和fs本身地址是一样的,这么设计可能是为了将来给TEB移动位置, 而所有微软API只要访问TEB都是这么写的,所以微软怎么写就跟着怎么写喽
在高级语言的编程中也可以使用GetThreadSelectEntry, 这个函数来获取TEB