2

这是情况。我正在调查 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,程序集从符号表中指定的地址开始。这背后的逻辑是什么,我如何以编程方式识别正确的起始地址?

4

0 回答 0