你们中的许多人可能还记得旧的DOS程序 - 调试。虽然在许多方面已经过时,但其中一个好处是可以轻松找到给定指令的字节序列,而无需完成编写程序,编译,反汇编,检查文件内容的步骤。 ..输入指令,然后转储指令地址。令人遗憾的是,'debug'不执行32位指令。
有没有人知道为32位x86指令执行类似操作的工具?我不想经历整个编译过程;我只需要能够输入几条指令,然后用它来表示指令的长度及其字节序列。
答案 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(虽然我还没有确认链接版本包含它...)