2015-05-26 92 views
2

我有一个包含ARM v8二进制代码的文件。我想反汇编这个文件,并得到它包含的实际汇编代码。在ARMv8中为objdump反汇编器定义代码偏移量

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

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

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

如果我知道这些代码将坐在地址为0x12345678内存:

  1. 有没有办法告诉objdump的使用这个地址作为起始地址?
  2. 如果没有,可我有些头添加到二进制文件,说是这样的:

    。 = 0×12345678

在此先感谢..

+0

你有足够的磁盘空间来简单地垫的文件的开头与0x12345678的零字节? :P – Notlikethat

+0

不幸的是没有磁盘空间和运行时间:( – siwesam

+0

这是一个对象,而不是一个链接的二进制文件,你可以将二进制文件链接到最终地址,然后反汇编 –

回答

3

快速闲逛揭示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: 

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

我不知何故错过了..这正是我需要的..谢谢。 – siwesam