【问题标题】:Is there a command line tool to get the machine code for an assembly instruction?是否有命令行工具来获取汇编指令的机器代码?
【发布时间】:2010-09-15 09:01:06
【问题描述】:
0x042444FF; /* inc dword ptr [esp+4] */

我需要这个工具来知道哪个部分表示incdword,反之亦然。

【问题讨论】:

  • 哪台机器?也许将其添加到标签/问题

标签: assembly machine-code


【解决方案1】:

您可以使用objdump 工具将可执行二进制文件“反编译”回汇编代码,但由于可能的优化,生成的汇编代码可能与原始程序集不同(但它们本质上应该相似)。

【讨论】:

  • 是否可以将汇编代码打包回可执行文件?
  • 这就是汇编编译。您应该使用nasm 来执行此操作。
  • 是否可以禁用 objdump 的所有可能优化?
  • 嗯,你得到什么真的取决于程序是如何编译的。您可以使用 `-O0 -g' 关闭 gcc 中的优化。
【解决方案2】:

获取该十六进制数字并为您反汇编的命令行工具。我没有听说过工具。您可以使用该数字制作一个 elf 文件,并将这四个字节作为二进制文件,然后调用 objdump。有类似的东西,不过你可以查一下。

http://ref.x86asm.net/index.html

http://ref.x86asm.net/coder32.html

0x44 告诉你这是一个增量。 x86 是可变长度的,因此其他一些字节也会发挥作用。如果 0x04 是 esp 的偏移量,我不会感到惊讶。

【讨论】:

    【解决方案3】:

    以下内容有点不方便,但可以:

    $ xxd -r > objdump-test.bin
    0000 ff 44 24 04
    $ objdump -D --target=binary --architecture i386:intel objdump-test.bin 
    
    objdump-test.bin:     file format binary
    
    Disassembly of section .data:
    
    0000000000000000 <.data>:
       0:   ff 44 24 04             inc    DWORD PTR [esp+0x4]
    

    xxd 是一个可以反向工作的 hexdump 实用程序,它是 X11 的一部分。 0000 是生成文件中十六进制数据的地址。

    您可以使用任何其他工具来创建二进制文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2011-04-10
      相关资源
      最近更新 更多