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

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

我期望看到中的符号数量libc.so.6文件包括打印函数。我用的是纳米找到它们的工具,但它说 libc.so.6 中没有符号。

答案1

它可能已经去掉了常规符号,剩下的是动态符号,您可以使用nm -D.

答案2

@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规范中剥离出来。

答案3

查明它是共享对象还是常规 ASCII 文件。如果它是共享对象,您应该看到“ELF 32 位 LSB 共享对象”,

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

相关内容