这是情况。我正在调查 ARM 二进制文件。使用objdump -T
查看动态符号表时,输出显示我(摘自真实案例):
DYNAMIC SYMBOL TABLE:
00000000 DF *UND* 00000000 __cxa_finalenter
....
00002055 g DF .text 00000060 SomeFunction
...
0000818c g DF .text 00000008 _Unwind_GetTextReleaseBase
....
符号的反汇编给出以下(objdump -d
):
...
00002054 <SomeFunction>:
2054: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
2056: 1c04 adds r4, r0, #0
2058: 4815 ldr r0, [pc, #84]
...
0000818c <_Unwind_GetTextRelBase>:
818c: e92d4008 push {r3, lr}
8190: ebffe79c bl 2008 <abort@plt>
我的问题是,您可以看到动态符号表中指定的值SomeFunction
是 0x2055,但实际反汇编从 0x2054 开始。但是,对于_Unwind_GetTextRelBase
,程序集从符号表中指定的地址开始。这背后的逻辑是什么,我如何以编程方式识别正确的起始地址?