私はRUNPATH
動的依存関係のために ELF 変数を試しています。途中でbash
変更されたバイナリのコピーを取得し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