更新

更新

我正在尝试使用 ELFRUNPATH变量来实现动态依赖。在此过程中,我得到了一份bash带有 Changed 的​​二进制文件的副本RUNPATHldd在其上运行会返回:

$ 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以某种方式链接它?

相关内容