siwesam
siwesam

Reputation: 513

defining code offset for objdump disassembler in ARMv8

I have a file containing ARM v8 binary code. I want to disassemble the file and get the actual assembly code contained in it.

Assuming the file name is tmp.o I run:

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

This gives me the correct disassembly. However, the offset for branch instructions assumes that this code sits in address 0x00000000.

If I know that the code will sit in address 0x12345678 in memory:

  1. Is there a way to tell objdump to use this address as the start address?
  2. If not, can I add some header to the binary file that says something like:

    . = 0x12345678

Thanks in Advance..

Upvotes: 4

Views: 4948

Answers (1)

Notlikethat
Notlikethat

Reputation: 20984

A quick poke around reveals objdump's --adjust-vma option, which seems to do exactly this.

Using the first raw binary which came to hand:

$ 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
...

vs.

$ 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
...

Upvotes: 6

Related Questions