首页
社区
课程
招聘
[求助]fs寄存器的菜鸟困惑
发表于: 2010-12-10 09:47 10224

[求助]fs寄存器的菜鸟困惑

2010-12-10 09:47
10224

最近在看SEH的东西,说道 fs:[0]总是指向链表顶端,于是打开OD

fs=003B
.....
fs:[0] = 0012FCAC
fs:[4] = 00130000
fs寄存器怎么寻址的?
乘16+偏移?
是指向内存吗?
so confused .....


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
fs是段寄存器吧
2010-12-10 09:57
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
FS寄存器指向当前活动线程的TEB结构(线程结构)

偏移  说明

000  指向SEH链指针

004  线程堆栈顶部

008  线程堆栈底部

00C  SubSystemTib

010  FiberData

014  ArbitraryUserPointer

018  FS段寄存器在内存中的镜像地址

020  进程PID

024  线程ID

02C  指向线程局部存储指针

030  PEB结构地址(进程结构)

034  上个错误号
2010-12-10 10:21
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
4
这个解释很详细
2010-12-10 10:25
0
雪    币: 205
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我想在OD中“看”下这个“TEB结构”
2010-12-10 10:26
0
雪    币: 179
活跃值: (26)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
楼主没发现03B后面还有东西吗,完整的是

FS 003B 32位 7FFDF000

其中后面的7FFDF000才是FS:[0]的位置,OD的内存窗口中可以直接看到这个地址。
因为FS是段寄存器,所以只有16位,是从以前的实模式保留下来的。
实模式中段寄存器保存的是段地址,但是在保护模式下保存的是段选择子,和实模式是完全不同的。
关于段选择子楼主可以去看看关于保护模式的资料。
2010-12-10 10:30
0
雪    币: 205
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
了解了,感谢 SJQIANG 及楼上热心的诸君~
2010-12-10 11:23
0
雪    币: 393
活跃值: (150)
能力值: (RANK:110 )
在线值:
发帖
回帖
粉丝
8
Windows在创建线程时,操作系统会为每个线程分配TEB结构,并且将FS段选择器指向当前线程的TEB数据结构。

   Typedef   struct _NT_TIB {  

   Struct _EXCEPTION_REGISTERATION_RECORD * ExceptionList;

   PVOID StackBase;

   PVOID StackLimit;

PVOID SubSystemTib;

   Union {

          PVOID FiberData;

          ULONG Version;

      };

      PVOID ArbitaryUserPointer;

   Struct    _NT_TIB * Self;

} NT_TIB;


上面结构体,很明显:
000  指向SEH链指针

004  线程堆栈顶部

008  线程堆栈底部

00C  SubSystemTib

010  FiberData

014  ArbitraryUserPointer

018  FS段寄存器在内存中的镜像地址

020  进程PID

024  线程ID

02C  指向线程局部存储指针

030  PEB结构地址(进程结构)

034  上个错误号
2010-12-11 11:59
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不是


dg 3b
2010-12-13 19:54
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大牛们win7下Idle进程的地址怎么获取?
2010-12-13 19:58
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
前2天突发奇想要给FS:0下内存断点,可是在OD里不认识这个地址。后来又想起来,映像中OD 好像对7FFFxxxx之类的地址无法下断,那位高手给解释一下。
2010-12-14 20:54
0
雪    币: 205
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
好像[7FFFF000]有64K不可访问区域,其他我也不清楚

FS存的是段选择子,保护模式的,跟实模式不同,而且WINDOWS运行时,没用到分段管理机制,所有段从[0H]开始,64位的直接忽略了段基地址
还有,别理解为段描述符没用了,段描述符其他位还是起作用的
2010-12-23 15:10
0
雪    币: 29
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习了!
2010-12-24 02:23
0
雪    币: 42
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
那个偏移是直接在中括号里面写的,例如:        mov eax, fs:[0x020]是获取当前程序的PID
2019-11-30 13:29
0
游客
登录 | 注册 方可回帖
返回
//