Debugging 用于32位x86汇编的类DOS调试程序

Debugging 用于32位x86汇编的类DOS调试程序,debugging,assembly,Debugging,Assembly,你们中的许多人可能还记得旧的DOS程序——debug。虽然在许多方面都过时了,但它的一个优点是,人们可以很容易地找到给定指令的字节序列,而不必经过编写程序、编译、反汇编、检查文件内容等步骤。。。。输入指令,然后转储指令地址。”很遗憾,“调试”没有执行32位指令 有人知道有一种工具可以对32位x86指令执行类似的操作吗?我不想经历整个编译过程;我只需要能够输入几条指令,让它说出指令的长度及其字节序列。可以找到一些简单的32位命令行调试器。根据您的描述,可能很适合您的需要。至少微软的一些版本包含一个

你们中的许多人可能还记得旧的DOS程序——debug。虽然在许多方面都过时了,但它的一个优点是,人们可以很容易地找到给定指令的字节序列,而不必经过编写程序、编译、反汇编、检查文件内容等步骤。。。。输入指令,然后转储指令地址。”很遗憾,“调试”没有执行32位指令


有人知道有一种工具可以对32位x86指令执行类似的操作吗?我不想经历整个编译过程;我只需要能够输入几条指令,让它说出指令的长度及其字节序列。

可以找到一些简单的32位命令行调试器。根据您的描述,可能很适合您的需要。至少微软的一些版本包含一个名为CDB的命令行调试器(尽管我还没有验证链接版本是否包含它…)

DOS
debug
是一个交互式汇编程序和调试器,输入汇编代码会导致该行立即转换为机器代码——这就是您所丢弃的代码

因此,您所需要的只是使用脚本或批处理文件自动化您最喜欢的汇编程序

下面是我使用流行的汇编程序在一两分钟内提出的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命令行以获得更好的输出。只要您告诉任何命令行汇编程序使用简单的二进制输出格式,这个想法都应该适用于它。

有趣的问题!。为什么不标记“debugging”?在您提到“debugging”标记之前,我没有想过要添加它。谢谢,很有趣。还不确定它是否适合我的目的,但我仍在玩弄它。谢谢你的建议。