繁体   English   中英

如何将内存地址转换为代码段地址?

[英]How to convert a memory address to a code segment address?

如何将地址转换为16位代码段(CS寄存器)? 例如,如果.text段以00E51000开始,那么如何为该段计算CS寄存器? 此问题特定于32位x86体系结构。

在32位模式下,您可以(通常应该) 始终使用引用以base = 0 / limit = -1引用GDT条目的CS值。 如果您是在主流操作系统下的用户空间中运行,那么您的过程就已经如此。 实际上,DS / ES / SS将以相同的方式设置,即平面内存模型。 (FS或GS对于线程本地存储可能具有非零的基数。)

然后,您可以在偏移量= 0x00E51000的那个节/段中引用存储器。 例如mov eax, 0x00E51234 / jmp eax

在DS / ES / SS也为0 / -1的情况下,您将拥有一个平面内存模型,其中mov eax, [0x00E51234]会加载您要跳转到的相同字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM