我希望你不是在询问主要的条目,而是指出对于所请求的库libm.so.6,例如在文件/lib/libm.so.6中找到,但是询问两个异常值。
为什么它们显示不同?对于linux-gate.so.1它是因为它实际上不是磁盘上的文件 – 它被内核暴露为进行系统调用的机制。对于/lib/ld-linux.so.2,这是因为这是用于实际运行应用程序的程序解释器。
有一个非常好的blog entry描述linux-gate.so,它解释很好。
对于/lib/ld-linux.so.2,您必须了解启动ELF二进制文件时会发生什么。简单的答案是这些类型的二进制文件的内核处理程序使用这个文件来启动应用程序。
该程序的主要目的是将二进制文件映射到内存中,加载程序中任何引用的库(例如前面提到的libm.so.6),然后将控制权交给正在执行的二进制文件的起始地址。
该程序被定义为ELF文件的结构的一部分,位于程序标题的INTERP部分。对于32位linux二进制文件,这是32位解释器的典型名称。对于64位二进制文件,您会发现它通常称为ld-linux-x86_64.so.2(对于64位x86平台)。
您可以使用readelf -l和INTERP部分自己确定此信息:
INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001c 0x000000000000001c R 1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]