首页 > 解决方案 > 为什么 nm libc.so 报告没有符号?

问题描述

我已经构建了一个像这样的简单程序:

g++ 应用程序.cpp -o 应用程序.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 不是库,而是指向实际库的某种链接,那么我如何才能找到实际库?

标签: gcclibcnm

解决方案


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

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


推荐阅读