当前位置:  开发笔记 > 运维 > 正文

如何解释ldd程序的输出?

如何解决《如何解释ldd程序的输出?》经验,为你挑选了2个好方法。

第一行是VDSO.这在vdso(7)联机帮助页中有详细描述.基本上它是一个嵌入在你的内核中的共享库,并在执行新进程时自动加载.这就是为什么右侧没有文件系统路径 - 没有!该文件仅存在于内核内存中(嗯,不是100%精确,但请参阅手册页以获取更多信息).

最后一行是ELF解释器.这在ld.so(8)联机帮助页中有详细描述.它有一个完整路径的原因是因为你的程序有完整的路径硬编码.它在右侧没有条目的原因是它没有(直接)链接,因此没有执行搜索.你可以通过运行来检查:

$ readelf -l node | grep interpreter
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
$ scanelf -i node
ET_EXEC /lib64/ld-linux-x86-64.so.2 node

所有其他行都是您链接的库.您可以通过在文件上DT_NEEDED运行时查看标记来查看这些内容readelf -d.由于这些文件缺少完整路径,因此ld.so需要对其执行动态路径搜索.这实际上是线条告诉你的:" libdl.so.2需要,所以当我搜索它时,我发现它/lib64/libdl.so.2(并在地址处加载到内存中0x00007f70f7855000)"



1> Mike Frysing..:

第一行是VDSO.这在vdso(7)联机帮助页中有详细描述.基本上它是一个嵌入在你的内核中的共享库,并在执行新进程时自动加载.这就是为什么右侧没有文件系统路径 - 没有!该文件仅存在于内核内存中(嗯,不是100%精确,但请参阅手册页以获取更多信息).

最后一行是ELF解释器.这在ld.so(8)联机帮助页中有详细描述.它有一个完整路径的原因是因为你的程序有完整的路径硬编码.它在右侧没有条目的原因是它没有(直接)链接,因此没有执行搜索.你可以通过运行来检查:

$ readelf -l node | grep interpreter
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
$ scanelf -i node
ET_EXEC /lib64/ld-linux-x86-64.so.2 node

所有其他行都是您链接的库.您可以通过在文件上DT_NEEDED运行时查看标记来查看这些内容readelf -d.由于这些文件缺少完整路径,因此ld.so需要对其执行动态路径搜索.这实际上是线条告诉你的:" libdl.so.2需要,所以当我搜索它时,我发现它/lib64/libdl.so.2(并在地址处加载到内存中0x00007f70f7855000)"



2> zedfoxus..:

ldd filename 向您显示文件使用的程序共享库。

例如,libc.so.6是libc共享对象版本6,它位于/ lib64中,其内存位置为0x00007f70f684f000。

最后一行讨论/ lib64下的ld-linux-x86-64.so版本2。这位研究员将找到并加载共享库的node需求。它将准备这些库并运行它们。因此,很粗略地说,ld-linux-x86-64是赛跑者。libc.so.6和其他文件将被加载,并ldd显示这些共享库的位置和内存位置。那是我的理解。

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有