【问题标题】:defining code offset for objdump disassembler in ARMv8在 ARMv8 中为 objdump 反汇编程序定义代码偏移量
【发布时间】:2015-08-08 05:07:08
【问题描述】:

我有一个包含 ARM v8 二进制代码的文件。我想反汇编文件并获取其中包含的实际汇编代码。

假设文件名为 tmp.o 我运行:

/opt/linaro/A64-tools/bin/aarch64-linux-gnu-objdump -b binary -m AARCH64 -D tmp.o

这给了我正确的反汇编。但是,分支指令的偏移量假定此代码位于地址 0x00000000 中。

如果我知道代码将位于内存中的地址 0x12345678:

  1. 有没有办法告诉 objdump 使用这个地址作为起始地址?
  2. 如果没有,我可以在二进制文件中添加一些标题,如下所示:

    。 = 0x12345678

提前致谢..

【问题讨论】:

  • 您是否有足够的磁盘空间来简单地用 0x12345678 零字节填充文件的开头? :P
  • 不幸的是没有磁盘空间也没有运行时:(
  • 这是一个对象而不是链接的二进制文件,您可以将二进制文件链接到最终地址,然后对其进行反汇编
  • @dwelch 这是我从一些内存快照创建的虚拟对象。它并不意味着被链接。我需要在独立模式下对其进行反汇编。不过谢谢。
  • 我知道关键是您的最终地址直到链接时间才正常应用,因此如果 objdump 中没有此命令行选项,那么您的选择是在基数为零的位置反汇编对象并处理它或者严格链接,目的是为了拆解改地址...

标签: disassembly arm64 objdump


【解决方案1】:

快速浏览一下 objdump 的 --adjust-vma 选项,似乎正是这样做的。

使用手头的第一个原始二进制文件:

$ aarch64-linux-gnu-objdump -b binary -m aarch64 -D arch/arm64/boot/Image

arch/arm64/boot/Image:     file format binary


Disassembly of section .data:

0000000000000000 <.data>:
       0:       91005a4d        add     x13, x18, #0x16
       4:       140003ff        b       0x1000
...

对比

$ aarch64-linux-gnu-objdump -b binary -m aarch64 --adjust-vma=0x12345678 -D arch/arm64/boot/Image

arch/arm64/boot/Image:     file format binary


Disassembly of section .data:

0000000012345678 <.data>:
    12345678:   91005a4d        add     x13, x18, #0x16
    1234567c:   140003ff        b       0x12346678
...

【讨论】:

  • 不知何故错过了它。这正是我需要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多