我已经构建了一个像这样的简单程序:
g++ application.cpp -o application.exe
然后执行命令;
ldd application.exe
...
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
...
Run Code Online (Sandbox Code Playgroud)
我想列出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
Run Code Online (Sandbox Code Playgroud)
为什么 nm 报告没有符号?如果 libc.so.6 不是库,而是某种指向实际库的链接,那么我如何才能找到实际库?
Flo*_*mer 11
默认情况下,nm读取.symtabELF 对象中的部分,这在不可重定位对象中是可选的。使用-D/--dynamic选项,您可以指示nm读取动态符号表(它们是运行时实际使用的符号)。您可能还想使用,--with-symbol-versions因为 glibc 广泛使用符号版本控制。
或者,您可以使用eu-readelf --symbols=.dynsym或objdump -Tw。(readelf -sDW不包括符号版本信息。)