DOS调试类似于32位x86程序集的程序

时间:2010-07-08 17:56:58

标签: debugging assembly

你们中的许多人可能还记得旧的DOS程序 - 调试。虽然在许多方面已经过时,但其中一个好处是可以轻松找到给定指令的字节序列,而无需完成编写程序,编译,反汇编,检查文件内容的步骤。 ..输入指令,然后转储指令地址。令人遗憾的是,'debug'不执行32位指令。

有没有人知道为32位x86指令执行类似操作的工具?我不想经历整个编译过程;我只需要能够输入几条指令,然后用它来表示指令的长度及其字节序列。

2 个答案:

答案 0 :(得分:4)

DOS debug是一个交互式汇编程序以及一个调试程序,输入汇编代码导致该行被立即转换为机器代码 - 这就是你抛出的内容。

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

这是我使用流行的nasm汇编程序在一两分钟内提出的bash函数:

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 :(得分:1)

可以找到一些简单的32位命令行调试器。根据您的说明,OllyDbg可能会很好地满足您的需求。至少某些版本的Microsoft Debugging Tools for Windows包含一个名为CDB的版本,代表Commandline DeBugger(虽然我还没有确认链接版本包含它...)