微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS-DOS 可执行文件的 [mov] 指令在入口点动态重定位

如何解决MS-DOS 可执行文件的 [mov] 指令在入口点动态重定位

我在 IDA 中反汇编了一个 MS-DOS 可执行文件(16 位),入口点的第一条指令是

mov ax,0x1000 ;  B8 00 10

但是,dump raw hex 时,对应的字段是

mov ax,0x0000 ;  B8 00 00

加载程序后是否有动态重定位?

解决方法

实模式可执行文件链接到线性地址0,就好像整个兆字节的内存都是他们的。当然不是,地址0有256字节的中断表,后面是BIOS数据区,常驻程序等
当程序加载器分配可用内存时,它会知道图像基址,即起始线性地址。然后它将 EXE 文件的内容加载到该内存中,并查看 MZ 头 中的重定位表。该表是一个指向现在加载到内存中的 WORDS 的 FAR 指针数组,需要通过图像库进行提升。 this EXE description 中是名为 EXE_RELOC 的表。

是的,入口指令 mov ax,@data 被汇编并链接为 mov ax,0,但其正文中的直接 0 被标记为加载时重定位 em>。加载程序后,我们可以在调试器中看到重定位的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。