我建立了一个像这样的简单程序:
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不是库,而是指向实际库的某种链接,那么如何找到实际库?
默认情况下,nm
读取.symtab
ELF对象中的节,这在不可重定位的对象中是可选的。使用-D
/--dynamic
选项,可以指示nm
读取动态符号表(它们是运行时实际使用的符号)。您可能还想使用,--with-symbol-versions
因为glibc广泛使用符号版本控制。
或者,您可以使用eu-readelf --symbols=.dynsym
或objdump -Tw
。(readelf -sDW
不包括符号版本信息。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句