man ldd |
![]() |
Добавил(а) microsin |
Утилита ldd выводит информацию о зависимостях совместно используемых библиотек (shared object dependencies). SYNOPSIS ldd [option]... file... ОПИСАНИЕ ldd напечатает список shared-объектов (совместно используемых библиотек), необходимых каждой программе или для программы (или библиотеки), указанной в командной строке. Ниже показан пример использования ldd для анализа зависимостей ls: $ ldd /bin/ls linux-vdso.so.1 (0x00007ffff7fc1000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ffff7f53000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff7c00000) libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007ffff7ebc000) /lib64/ld-linux-x86-64.so.2 (0x00007ffff7fc3000) В обычном случае ldd запустит standard dynamic linker (см. ld.so(8)) с переменной окружения LD_TRACE_LOADED_OBJECTS, установленной в 1. Это приведет к тому, что dynamic проверит динамические зависимости программы, найдет (в соответствии с правилами, описанными в ld.so(8)) и загрузит объекты, которые удовлетворяют эти зависимости. Для каждой зависимости ldd покажет место размещения соответствующего объекта и адрес (в hex-формате), по которому он загружен (shared-зависимости linux-vdso и ld-linux относятся к специальным, см. vdso(7) и ld.so(8)). Безопасность. Имейте в виду, что при определенных обстоятельствах (например, когда программа указывает ELF-интерпретатор, отличающийся от ld-linux.so), некоторые версии ldd могут попытаться получить информацию о зависимости путем попытки прямого запуска программы, что может привести к запуску любого кода, определенного в ELF-интерпретаторе программы, и возможно к выполнению самой программы. Например, в версиях glibc до 2.27 утилита это делала, хотя большинство дистрибутивов предоставляли модифицированную версию без этой "фичи". Таким образом, никогда не следует применять ldd на исполняемом коде, к которому нет доверия, поскольку это может привести к выполнению произвольного (потенциально опасного) кода. Более безопасная альтернатива для обработки untrusted исполняемых файлов: $ objdump -p /path/to/program | grep NEEDED Однако следует отметить, что эта альтернатива покажет только прямые зависимости исполняемого кода, в то время как ldd покажет полное дерево зависимостей исполняемого кода. ОПЦИИ --version -v, --verbose -u, --unused -d, --data-relocs -r, --function-relocs --help Подсказка по использованию. BUGS ldd не работает на a.out shared-библиотеках. ldd не работает с некоторыми очень старыми программами a.out, которые были собраны до того, как в релизы компилятора была добавлена поддержка ldd. Если вы используете ldd на одной из таких программах, то программа попытается запуститься с argc = 0, и результат может быть непредсказуемым. СМ. ТАКЖЕ pldd(1), sprof(1), ld.so(8), ldconfig(8). [Ссылки] 1. man objdump. |