我正在嘗試使用 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
以某種方式連結它?