我想反汇编我有一个可引导的x86磁盘的MBR (前512个字节)。我已经使用以下命令将MBR复制到一个文件
dd if=/dev/my-device of=mbr bs=512 count=1
对于可以反汇编文件mbr
的Linux实用程序有什么建议吗?
发布于 2009-11-15 17:42:02
您可以使用objdump。根据this article的说法,其语法是:
objdump -D -b binary -mi386 -Maddr16,data16 mbr
发布于 2009-11-15 17:42:12
出于这个目的,我喜欢使用ndisasm
。它附带了NASM汇编程序,该程序是免费和开源的,包含在大多数linux发行版的包存储库中。
发布于 2015-12-23 04:44:05
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
如果您的代码是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标头已包含此信息。
jameslin建议的ndisasm
也是一个很好的选择,但objdump
通常与操作系统一起提供,可以处理GNU binutil支持的所有架构(GCC支持的架构的超集),其输出通常可以输入到GNU as
中(当然,ndisasm的输出通常可以输入到nasm
中)。
Peter Cordes建议“Agner Fog's objconv是非常好的。它将标签放在分支目标上,使得更容易理解代码的作用。它可以反汇编成NASM、YASM、MASM或AT&T (GNU)语法。“
Multimedia Mike已经发现了--adjust-vma
;ndisasm
的等价物是-o
选项。
比方说,要反汇编sh4
代码(我使用了Debian中的一个二进制代码进行测试),可以使用GNU binutils (几乎所有其他反汇编程序都被限制在一个平台上,比如带有ndisasm
和objconv
的x86 ):
objdump -D -b binary -m sh -EL x
-m
就是机器,-EL
的意思是Little Endian (对于sh4eb
,请使用-EB
),这与以任何一种字节顺序存在的体系结构相关。
https://stackoverflow.com/questions/1737095
复制相似问题