2015-05-26 2 views
2

У меня есть файл, содержащий двоичный код ARM v8. Я хочу разобрать файл и получить фактический код сборки, содержащийся в нем.определение смещения кода для дизассемблера objdump в ARMv8

Предполагая, что имя файла является tmp.o я бег:

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

Это дает мне правильную разборку. Однако смещение для инструкций филиала предполагает, что этот код находится в адресе 0x00000000.

Если я знаю, что код будет сидеть в адрес 0x12345678 в памяти:

  1. Есть ли способ сказать objdump использовать этот адрес в качестве начального адреса?
  2. Если нет, то я могу добавить заголовок в двоичный файл, который говорит что-то вроде:

    . = 0x12345678

Заранее спасибо ..

+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

Смежные вопросы