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

mas*_*sec 38 linux shared-library symbol-table nm

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

PSk*_*cik 70

它的常规符号可能已被剥离,剩下的是动态符号,您可以使用nm -D.


小智 16

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

LSB_5.0.0第 10.2.2.1 节,“ELF 节类型”,说一个符合标准的共享库应该有一个.symtab.dynsym但不是两个。作为 ABI 库的一部分,libc 被剥离出来.symtab以符合规范。