我想拆卸的MBR(第512字节),可启动x86盘,我有。我复制的MBR到一个文件使用

dd if=/dev/my-device of=mbr bs=512 count=1

任何建议为Linux工具,可以拆卸的文件 mbr?

有帮助吗?

其他提示

在GNU工具被称为的 objdump的下,例如:

objdump -D -b binary -m i8086 <file>

我喜欢用于此目的ndisasm。它带有NASM汇编程序,其为自由开放的源和包括在大多数Linux版本的包的存储库。

ndisasm -b16 -o7c00h -a -s7c3eh mbr

解释 - 来自 ndisasm 联机帮助页

  • -b = 指定 16、32 或 64 位模式。默认为 16 位模式。
  • -o = 指定文件的名义加载地址。此选项使 ndisasm 获取它在左侧边缘列出的地址,以及右侧 PC 相对跳转和调用的目标地址。
  • -a = 启用自动(或智能)同步模式,在该模式下,ndisasm 将尝试通过检查相对跳转的目标地址来猜测应在何处执行同步,并将其称为反汇编。
  • -s = 手动指定同步地址,这样ndisasm将不会输出任何包含该地址两侧字节的机器指令。因此,从该地址开始的指令将被正确反汇编。
  • mbr = 要反汇编的文件。

starbluehlovdal 两个都有份的典型的回答。如果你想要拆卸的原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

如果你的代码是小精灵(或.出(或(E)。)),可以用简短形式:

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

32或64位代码、省略 ,8086;小精灵的头已经包括了这一信息。

ndisasm, 建议的那样, jameslin, 也是不错的选择,但是 objdump 通常带有操作系统和可以处理所有的体系结构支持的GNU binutils(超集那些支持海湾合作委员会),其输出能通常被送入GNU as (ndisasm的通常可以被送入 nasm 虽然,当然)。

彼得*科德斯 表明,"昂纳雾的objconv 是非常好的。它把标签上,分支的目标,使得更容易找出什么代码。它可以拆卸成NASM,YASM,MASM,或AT&T(GNU)语法"。

多媒体迈克 已经发现了 --adjust-vma;的 ndisasm 相当的 -o 选项。

拆解,比如说, sh4 代码(I使用的二进制的一个从Debian测试),使用这与GNU binutils(几乎所有其他反汇编限于一个平台,例如与x86 ndisasmobjconv):

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

-m 是机器, -EL 意味着Little Endian(对 sh4eb 使用 -EB 相反),它是有关于架构中存在两字节序.

试试这个命令:

sudo dd if=/dev/sda bs=512 count=1 | ndisasm -b16 -o7c00h -
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top