ELF二进制:为什么符号值与实际符号地址不同?

时间:2015-10-20 15:38:45

标签: arm elf disassembly thumb

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

0 个答案:

没有答案