debugging - 用于 32 位 x86 汇编的 DOS 调试程序

标签 debugging assembly

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

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

最佳答案

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 命令行以获得更好的输出。只要您告诉它使用简单的二进制输出格式,这个想法就应该适用于任何命令行汇编器。

关于debugging - 用于 32 位 x86 汇编的 DOS 调试程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3206535/

相关文章:

linux - Debian/Ubuntu 的调试信息文件约定?

windows - 调查内存泄漏

assembly - 将寄存器值加载到 FPU 堆栈

assembly - 为什么在xv6中gdtdesc中有sizeof(gdt)-1

c - 汇编 AT&T x86 从文件读取

php - 如何在 WordPress 中调试 save_post 操作?

c - 调试内存分配断言错误

c# - System.Diagnostics.Debugger.Debug() 停止工作

linux - 如何将 sysenter 用于链接到 SystemⅤ 库的 64 位用户态程序?

c - 如何将.text段以外的段中的执行代码放到.text段的中间