【问题标题】:Disassembling A Flat Binary File Using objdump使用 objdump 反汇编平面二进制文件
【发布时间】:2012-12-26 18:51:31
【问题描述】:

我可以使用 objdump 反汇编一个平面二进制文件吗?

我熟悉反汇编结构化二进制可执行文件,例如使用以下方法的 ELF 文件:

objdump -d file.elf

但是如果我有一个我知道应该加载的平面二进制文件,例如地址 0xabcd1000,我可以要求 objdump 反汇编它吗?我尝试提供诸如“--start-address=0xabcd1000”之类的选项,但 objdump 只是声明它无法识别格式。

我对如何反汇编文件有其他想法,但我想知道 objdump 是否可以提供简单的解决方案。

【问题讨论】:

  • 这不是一个平面二进制文件。它看起来像是一个 ELF 文件。
  • 在上面的例子中,我提到了一个ELF文件(file.elf),以说明我熟悉基本的反汇编原理。但是,我有兴趣反汇编的文件绝对是一个平面二进制文件。文件中的第一个字节是要执行的第一个操作码。没有标题。

标签: reverse-engineering disassembly objdump


【解决方案1】:

我在另一个论坛上找到了我自己的问题的解决方案。它看起来像这样:

objdump -b binary --adjust-vma=0xabcd1000 -D file.bin

我已经对此进行了测试,并且可以正常工作。

【讨论】:

  • returns can't disassemble for architecture unknown!在我的情况下,您似乎错过了机器选项-m i386
  • 感谢您的收获。我怀疑这是因为 linux/x86 土地上的标准 objdump 处理 2 个架构。当我运行它时,我使用了一个只处理一个拱门的版本(在我的例子中是 SH-4)。
  • 你可以省略 --adjust-vma=0xabcd1000
  • 对于 x86-64 需要将架构指定为 -m i386:x86-64
  • --adjust-vma=.. 在您想说明内存中代码段的不同起始地址时非常有用。否则它将反汇编它,就好像它是从内存地址 0 开始加载的一样,但情况可能并非如此。也可以使用--start-address=.. 从二进制文件中不同的起始偏移量进行反汇编。
【解决方案2】:

starbluehlovdal 都有部分规范答案。如果你想反汇编原始 i8086 代码,你通常需要 Intel 语法,而不是 AT&T 语法,所以使用:

objdump -D -Mintel,i8086 -b binary -m i386 mbr.bin
objdump -D -Mintel,i386 -b binary -m i386 foo.bin    # for 32-bit code
objdump -D -Mintel,x86-64 -b binary -m i386 foo.bin  # for 64-bit code

如果您的代码是 ELF(或 a.out(或 (E)COFF)),则可以使用简写形式:

objdump -D -Mintel,i8086 a.out  # disassembles the entire file
objdump -d -Mintel,i8086 a.out  # disassembles only code sections

对于 32 位或 64 位代码,省略 ,8086; ELF 标头已包含此信息。

ndisasm,正如jameslin 所建议的,也是一个不错的选择,但objdump 通常是操作系统自带的,可以处理GNU binutils 支持的所有架构(GCC 支持的超集),以及它的输出通常可以输入到 GNU as(当然,ndisasm 通常可以输入到nasm)。

Peter Cordes 建议“Agner Fog's objconv 非常好。它将标签放在分支目标上,从而更容易弄清楚代码的作用。它可以反汇编成 NASM、YASM、MASM 或 AT&T (GNU) 语法。”

Multimedia Mike 已经发现了--adjust-vmandisasm 等效项是 -o 选项。

要反汇编,比如说,sh4 代码(我使用来自 Debian 的一个二进制文件进行测试),将其与 GNU binutils 一起使用(几乎所有其他反汇编程序都仅限于一个平台,例如带有 ndisasmobjconv 的 x86 ):

objdump -D -b binary -m sh -EL x

-m 是机器,-EL 表示 Little Endian(sh4eb 使用 -EB 代替),这与存在于任一字节序的架构相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多