为 ARMv8 中的 objdump 反汇编程序定义代码偏移量
defining code offset for objdump disassembler in ARMv8
我有一个包含 ARM v8 二进制代码的文件。我想反汇编文件并获取其中包含的实际汇编代码。
假设文件名为tmp.o I 运行:
/opt/linaro/A64-tools/bin/aarch64-linux-gnu-objdump -b binary -m AARCH64 -D tmp.o
这给了我正确的反汇编。但是,分支指令的偏移假定此代码位于地址 0x00000000。
如果我知道代码将位于内存中的地址 0x12345678 中:
- 有没有办法告诉objdump使用这个地址作为起始地址?
如果没有,我可以添加一些 header 到二进制文件中,内容如下:
。 = 0x12345678
提前致谢..
快速浏览一下就会发现 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
...
我有一个包含 ARM v8 二进制代码的文件。我想反汇编文件并获取其中包含的实际汇编代码。
假设文件名为tmp.o I 运行:
/opt/linaro/A64-tools/bin/aarch64-linux-gnu-objdump -b binary -m AARCH64 -D tmp.o
这给了我正确的反汇编。但是,分支指令的偏移假定此代码位于地址 0x00000000。
如果我知道代码将位于内存中的地址 0x12345678 中:
- 有没有办法告诉objdump使用这个地址作为起始地址?
如果没有,我可以添加一些 header 到二进制文件中,内容如下:
。 = 0x12345678
提前致谢..
快速浏览一下就会发现 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
...