为什么nm对于/lib/i386-linux-gnu/libc.so.6没有显示符号?


31

我希望在libc.so.6文件中看到包括printf在内的符号数量。我使用nm工具找到了它们,但是它说libc.so.6中没有符号。

Answers:


54

它可能已除去其常规符号,而剩下的是它的动态符号,可以使用获得nm -D


11

@PSkocik回答了这个问题。我只想添加更多细节。ELF中有两种符号节:.symtab.dynsym(有关详细信息请参见Linux Standard Base Core Specification,aka LSB_5.0.0)。.symtab用于共享库本身的链接步骤。链接完成后,.symtab就不再需要该部分了。该.dynsym部分包含重要的符号,应该在运行时由动态链接器搜索这些符号。nm默认情况下,仅转储该.symtab部分中的符号。

LSB_5.0.0第10.2.2.1节“ ELF节类型”说,一个符合要求的共享库应同时具有.symtab.dynsym不具有两者。作为ABI库的一部分,libc被剥离.symtab以符合规范。


0

找出它是共享对象还是常规ASCII文件。如果是共享库,则应该看到“ ELF 32位LSB共享库”,

file /lib/i386-linux-gnu/libc.so.6

libc.so.6显然是一个共享对象。
吉尔斯(Gilles)'所以

我从不假设在Linux环境中。考虑到有人可能已经触摸了根目录。是的,顾名思义,它显然是一个共享对象。而且,进行验证也不会有伤害;当您没有获得预期的输出时。
jncc99's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.