如何从 msdos 8086 的 hexdump 代码创建可执行的 COM 文件

逆向工程 DOS-COM
2021-06-27 21:11:23

我有一个 COM MSDOS 8086 文件的十六进制转储,我正在尝试将其转换为 COM 可执行文件。

环顾四周后,我找到了一个站点1,它可以对 hexdump 进行合理的反汇编。虽然,当我尝试在 TASM 中使用该程序集生成的代码时,它不会构建并抛出错误。

相比之下,我也尝试过使用 IDA,它似乎没有得到与1相同的组装结果

我的问题是:

  1. 在将 hexdump 转换为可执行的 COM 文件时,我还缺少其他任何方法吗?
  2. 该网站给了我这样的表达:mov $0x400,%di,但 TASM 只识别mov di,400. 这是将十六进制转储转换为 TASM 能够识别的指令的更好方法吗?

顺便说一句 - 上下文是我正在尝试解决一个 RE 谜语,我无法在线发布(而且我是 RE 和组装方面的新手)。

1个回答

DOS COM 文件没有任何结构或标题;它们由 DOS 按原样加载到内存中,并从第一个字节开始执行,因此您只需要将十六进制字节转换为二进制文件即可获得 COM 文件。

您看到的差异很可能是由处理器模式设置引起的;mov di, 400h在 16 位模式和mov edi, 0x40032 位模式下具有完全相同的操作码。

IDA 知道 COM 文件是 16 位代码并相应地反汇编它们,但 ODA 似乎默认为 32 位模式。要强制 16 位反汇编,请在模式组合框中选择 i8086。