Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1068739
  • 博文数量: 242
  • 博客积分: 10209
  • 博客等级: 上将
  • 技术积分: 3028
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-12 09:27
文章分类

全部博文(242)

文章存档

2014年(1)

2013年(1)

2010年(51)

2009年(65)

2008年(124)

我的朋友

分类: WINDOWS

2009-09-16 14:15:39

TEBThread Environment Block,线程环境块)
   系统在此
TEB中保存频繁使用的线程相关的数据。位于用户地址空间,在比 PEB 所在地址低的地方。进程中的每个线程都有自己的一个TEB。一个进程的所有TEB都以堆栈的方式,存放在从0x7FFDE000开始的线性内存中,每4KB为一个完整的TEB,不过该内存区域是向下扩展的。在用户模式下,当前线程的TEB位于独立的4KB段,可通过CPUFS寄存器来访问该段,一般存储在[FS:0]在用户态下WinDbg中可用命令$thread取得TEB地址

 

Process Environment Block,进程环境块)

   存放进程信息,每个进程都有自己的PEB信息。位于用户地址空间。在Win 2000下,进程环境块的地址对于每个进程来说是固定的,在0x7FFDF000处,这是用户地址空间,所以程序能够直接访问。准确的PEB地址应从系统的EPROCESS结构0x1b0偏移处获得,但由于EPROCESS在系统地址空间,访问这个结构需要有ring0的权限。还可以通过TEB结构的偏移0x30处获得PEB的位置,FS段寄存器指向当前的TEB结构:

mov eax,fs:[0x30]

mov PEB,eax

在用户态下WinDbg中可用命令$proc取得PEB地址。

 

见图1: PEBTEB


阅读(3776) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~