Disassembling A Flat Binary File Using objdump
我可以使用objdump拆解平面二进制文件吗?
我熟悉如何使用以下命令反汇编结构化的二进制可执行文件(例如ELF文件):
1 | objdump -d file.elf |
但是,如果我知道应该在例如地址0xabcd1000处加载一个平面二进制文件,我可以要求objdump对其进行反汇编吗? 我尝试提供诸如'--start-address = 0xabcd1000'之类的选项,但objdump仅声明它无法识别格式。
关于如何反汇编文件,我还有其他想法,但我想知道objdump是否可以提供简单的解决方案。
我在另一个论坛上找到了自己的问题的解决方案。看起来像这样:
1 | objdump -b binary --adjust-vma=0xabcd1000 -D file.bin |
我已经对此进行了测试,并且可以正常工作。
starblue和hlovdal都有部分规范的答案。如果要反汇编i8086原始代码,通常也需要Intel语法,而不是AT&T语法,因此请使用:
1 2 3 | 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)),则可以使用缩写形式:
1 2 | objdump -D -Mintel,i8086 a.out # disassembles the entire file objdump -d -Mintel,i8086 a.out # disassembles only code sections |
对于32位或64位代码,省略
如jameslin所建议的,
彼得·科德斯(Peter Cordes)表示:"阿格纳·福格(Agner Fog)的objconv非常好。它将标签放在分支目标上,使弄清楚代码的作用变得容易得多。它可以分解为NASM,YASM,MASM或AT&T(GNU)语法。"
多媒体Mike已经发现有关
要反汇编
1 | objdump -D -b binary -m sh -EL x |