ES/GS/FS 指向哪里?
逆向工程
视窗
部件
ollydbg
x86
2021-06-23 07:53:16
1个回答
在 x86 32 位窗口上,FS
段寄存器指向一个称为线程信息块或简称 TIB的结构。该结构由内核在线程创建时创建,用于支持 OS 相关功能、服务和 API。
数据 TIB 使用示例包括:
- 线程本地存储。
- 堆。
- 堆栈。
- SEH 异常链。
- 访问进程环境块(服务于类似的进程级目标)。
还有许多其他...
要预测对FS
寄存器的取消引用的实际值,您需要针对您正在使用的特定操作系统版本查阅该(仅部分记录的)结构的映射。例如,我之前提到的TIB维基百科页面描述了 32 位 Windows TIB 布局。
在 linux 上,GS
无论寄存器大小如何,寄存器都用于类似的目的,而 64 位 intel windows 使用FS
和GS
寄存器。
存储在 TIB 中的信息不应由程序直接使用,但该结构的特定成员如何经常用于非预期目的,例如以更普遍的方式检测调试器。
如您所见,其他段寄存器很少使用。
一点历史
尽管段寄存器用于与操作系统相关的功能,但这并不是段寄存器的预期目标。过去,当 CPU 寄存器大小在 8位和16 位之间变化时,寻址受到很大限制,只有 64KB 的地址空间可用。由于原始 CPU 仅在实模式(而不是保护模式)下运行,因此必须与所有正在运行的服务、进程、连接的外围设备等共享该地址空间...
为了绕过该限制,内存分段以两种形式投入使用。一种是保护模式 VS 实模式,另一种是段寄存器 - 用作用于寻址的实际寄存器的偏移量。这大大增加了寻址范围,被认为是一个有效的解决方案。在 32 位保护模式处理器的时代,每个进程都有 4GB 的虚拟可寻址空间,当然还有 64 位 CPU,段寄存器很少用于它们的原始目标(除了高度低级的组件,如实模式引导加载程序,这可能仍然需要额外的寻址)。
聚苯乙烯
DS
代表数据选择器。
其它你可能感兴趣的问题