Mul*_*ike 30 reverse-engineering objdump disassembly
我可以使用objdump反汇编平面二进制文件吗?
我熟悉使用以下方法反汇编结构化二进制可执行文件,例如ELF文件:
objdump -d file.elf
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个我知道应该加载的平面二进制文件,例如地址0xabcd1000,我可以请求objdump反汇编吗?我尝试提供诸如'--start-address = 0xabcd1000'之类的选项,但是objdump只是声明它不能识别格式.
我有关于如何反汇编文件的其他想法,但我想知道objdump是否可以提供一个简单的解决方案.
Mul*_*ike 36
我在另一个论坛上找到了我自己的问题的解决方案.它看起来像这样:
objdump -b binary --adjust-vma=0xabcd1000 -D file.bin
Run Code Online (Sandbox Code Playgroud)
我已经测试了这个并且它有效.
mir*_*los 19
starblue和hlovdal都具有典型的答案的一部分.如果你想反汇编原始的i8086代码,你通常也需要英特尔语法,而不是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
Run Code Online (Sandbox Code Playgroud)
如果您的代码是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
Run Code Online (Sandbox Code Playgroud)
对于32位或64位代码,省略,8086; ELF标头已包含此信息.
ndisasm,正如jameslin所建议的,也是一个不错的选择,但objdump通常附带操作系统,可以处理GNU binutils支持的所有架构(GCC支持的超集),其输出通常可以输入GNU as(ndisasm通常可以nasm但是当然要被喂入.
彼得·科德斯暗示" Agner Fog的objconv非常好.它将标签放在分支目标上,使得更容易弄清楚代码的作用.它可以反汇编成NASM,YASM,MASM或AT&T(GNU)语法."
多媒体迈克已经发现了--adjust-vma; 在ndisasm相当于是-o选项.
要反汇编sh4代码(我使用Debian中的一个二进制文件进行测试),请将其与GNU binutils一起使用(几乎所有其他反汇编程序仅限于一个平台,例如带有ndisasm和的x86 objconv):
objdump -D -b binary -m sh -EL x
Run Code Online (Sandbox Code Playgroud)
它-m是机器,-EL意味着Little Endian(代替sh4eb使用-EB),它与任何字节序中存在的体系结构相关.
| 归档时间: |
|
| 查看次数: |
47763 次 |
| 最近记录: |