代码之家  ›  专栏  ›  技术社区  ›  Sparky

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

  •  6
  • Sparky  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 14 年前
        1
  •  5
  •   Greg    14 年前

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

        2
  •  1
  •   Jerry Coffin    14 年前

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