为什么nm libc.so不报告任何符号?

时间:2019-01-05 13:34:59

标签: gcc libc nm

我建立了一个像这样的简单程序:

g ++ application.cpp -o application.exe

然后执行命令;

ldd application.exe
...
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 
...

我想列出libc库的所有符号:

nm /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols

nm --defined-only /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols

为什么nm没有报告符号?如果libc.so.6不是库,而是指向实际库的某种链接,那么如何找到实际库?

1 个答案:

答案 0 :(得分:2)

默认情况下,nm读取ELF对象中的.symtab部分,这在不可重定位的对象中是可选的。使用-D/--dynamic option,可以指示nm读取动态符号表(它们是运行时实际使用的符号)。您可能还需要使用--with-symbol-versions,因为glibc广泛使用符号版本控制。

或者,您可以使用eu-readelf --symbols=.dynsymobjdump -Tw。 (readelf -sDW不包括符号版本控制信息。)