gpt4 book ai didi

linux - 如何解释 ldd 程序的输出?

转载 作者:IT王子 更新时间:2023-10-29 00:21:54 26 4
gpt4 key购买 nike

[root@wdctc1281 bin]#  ldd node
linux-vdso.so.1 => (0x00007fffd33f2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f70f7855000)
librt.so.1 => /lib64/librt.so.1 (0x00007f70f764d000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f70f7345000)
libm.so.6 => /lib64/libm.so.6 (0x00007f70f7043000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f70f6e2d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f70f6c10000)
libc.so.6 => /lib64/libc.so.6 (0x00007f70f684f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f70f7a61000)

第一行和最后一行是什么意思?他们看起来不像正常人

xxxx.so => /lib64/xxxxx.so (0xxxxxxxxxxxxxxxxxxxx)

格式。

最佳答案

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

最后一行是ELF解释器。这在 ld.so(8) manpage 中有深入描述.它具有完整路径的原因是因为您的程序在其中硬编码了完整路径。它在右侧没有条目的原因是它没有(直接)链接,因此没有执行搜索。你可以通过运行来检查:

$ 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

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

关于linux - 如何解释 ldd 程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34428037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com