2015-05-26 106 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