为什么某些二进制文件中未显示“动态链接的函数名”?

时间:2018-07-17 00:39:11

标签: assembly dynamic linker binary objdump

看到objdump -D /bin/bash的结果,我发现有些奇怪。
动态链接的函数名称未附加!

以下是<.text>部分的一部分。
参见672c : call 26e0

...
672c:   e8 af bf ff ff          call   26e0 <main@@Base-0xcdc0>  # <--- Here
6731:   83 c4 10                add    $0x10,%esp
...



我对被叫地址26e0
感到好奇 并发现它指向<.plt.got>部分。见下文。

000026e0 <.plt.got>:
26e0:   ff a3 0c 00 00 00       jmp    *0xc(%ebx)
26e6:   66 90                   xchg   %ax,%ax
26e8:   ff a3 10 00 00 00       jmp    *0x10(%ebx)
...



因此,<.text>部分中的672c称为plt部分。
但是,通常,objdump应该将plt调用显示为<***@plt>的格式

例如

// gcc -o sample sample.c -fpic -pie
#include <stdio.h>

void main(){
        printf("go");
}

请参见下面的地址615

000005f0 <main>:
...
613:   89 c3                   mov    %eax,%ebx
615:   e8 36 fe ff ff          call   450 <printf@plt>   # <--- here
...

我的问题是:
为什么某些二进制文件(例如/bin/dash中没有显示“动态链接的函数名”?

0 个答案:

没有答案