32位x86汇编的DOS调试程序

6
许多人可能还记得旧的DOS程序-debug。虽然在许多方面已经过时,但其中一个好处是,不必编写程序、编译、反汇编、检查文件内容等步骤,就可以轻松找到给定指令的字节序列。只需输入指令,然后转储指令地址即可。遗憾的是,debug不能执行32位指令。
有没有人知道一种类似于32位x86指令的工具?我不想经历整个编译过程;我只需要能够输入几条指令,然后它就会输出指令的长度和其字节序列。

有趣的问题!为什么不打上“调试”标签呢? - pmod
直到你提到它,我才没有想到要添加“调试”标签。谢谢。 - Sparky
2个回答

5

DOS的debug是一种交互式汇编程序和调试器,输入汇编代码会立即将该行转换为机器代码,这也是你输出的内容。

所以你只需要使用脚本或批处理文件自动化你喜欢的汇编程序。

以下是我用几分钟时间编写的bash函数,使用了流行的nasm汇编程序:

opcode() {
  echo $* > tmp.S && nasm tmp.S -o tmp.o && od -x tmp.o
  rm -f tmp.o tmp.S
}

小于一秒钟即可完成。调用的形式如下:
$ opcode mov eax, [ebx]
0000000 6667 038b
0000004
$ opcode fadd st0,st1
0000000 c1d8
0000002

虽然不是很出色,但你可以调整od命令行的输出来使其更好。只要您告诉它使用简单的二进制输出格式,这个想法就适用于任何命令行汇编器。


1

有一些简单的32位命令行调试器可供使用。根据您的描述,OllyDbg 可能非常适合您的需求。至少微软的 Debugging Tools for Windows 的某些版本包括一个名为 CDB 的调试器,它代表命令行调试器(尽管我没有验证链接版本是否包含它...)


有趣。我还不确定它是否适合我的目的,但我仍在尝试中。谢谢你的建议。 - Sparky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接