Я экспериментирую с 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
Связывает ли это как-то?