我正在使用 Linaro 工具链在汇编和 C 中设计一个 AArch64 应用程序,并且经常使用 objdump 来查看我自己的反汇编二进制文件。但是,objdump 不会对文件的一部分进行解码,而是将其视为数据。它总是发生在源代码中的第二个标签之后。
例如,这段代码:
.global _Reset
_Reset:
BL get_cpuid
CBNZ x0, inf_loop
LDR x0, =page_table_base
LDR x1, =0x0000000000000601
STR x1, [x0, #0x00]
test:
LDR x1, =0x0060000040000601
STR x1, [x0, #0x08]
...
拆卸到
Disassembly of section .startup:
0000000000000000 <_Reset>:
0: 94000024 bl 90 <get_cpuid>
4: b50004c0 cbnz x0, 9c <inf_loop>
8: 58000880 ldr x0, 118 <TXTN+0x3>
c: 580008a1 ldr x1, 120 <TXTN+0xb>
10: f9000001 str x1, [x0]
0000000000000014 <test>:
14: 580008a1 .word 0x580008a1
18: f9000401 .word 0xf9000401
...
为什么会这样?