我正在尝试使用 ELFRUNPATH
变量来实现动态依赖。在此过程中,我得到了一份bash
带有 Changed 的二进制文件的副本RUNPATH
,ldd
在其上运行会返回:
$ ldd ./bash
linux-vdso.so.1 => (0x00007ffe6bdf9000)
libtinfo.so.5 (0x00007fbf8b97c000)
libdl.so.2 (0x00007fbf8b776000)
libc.so.6 (0x00007fbf8b3a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbf8bba7000)
-- 为什么没有依赖项的路径(来自我的自定义RUNPATH
)或not found
,这是什么意思?
我的猜测是:
ldd
找不到文件,但它们在内存中(括号中的数字是地址),并且ldd
通过某种现金机制以某种方式了解它,这是正确的吗?但是为什么ldd
找不到文件呢?如果它无法从 获取它们RUNPATH
,它应该继续到标准目录,对吧?
更新
今天它找到了文件(所以这是昨天的现金?):
$ cd dir_chroot2/
$ ldd ./bash
linux-vdso.so.1 => (0x00007ffed3530000)
libtinfo.so.5 => /home/.../dir_chroot2/./libtinfo.so.5 (0x00007f72c14a8000)
libdl.so.2 => /home/.../dir_chroot2/./libdl.so.2 (0x00007f72c12a1000)
libc.so.6 => /home/.../dir_chroot2/./libc.so.6 (0x00007f72c0ed0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f72c16d4000)
- 但ld-linux-x86-64.so.2
仍然从系统目录中获取,尽管bash
二进制文件及其上面的所有库都有RUNPATH=$ORIGIN/
.为什么会这样呢?是否linux-vdso.so.1
以某种方式链接它?