Инструменты пользователя

Инструменты сайта


linux:libs:ldd

ldd

       ldd - выдаёт список зависимостей от общих объектов

СИНТАКСИС

       ldd [параметр]… файл…

ОПИСАНИЕ

Программа ldd выдаёт список общих объектов (общих библиотек), которые требуются для каждой из заданных в командной строке программы или общего объекта. Пример использования и результат работы:

$ ldd /bin/ls
    linux-vdso.so.1 (0x00007ffcc3563000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000)
    /lib64/ld-linux-x86-64.so.2 (0x00005574bf12e000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)

Обычно, ldd вызывает стандартный динамический компоновщик (смотрите ld.so(8)), установив значение переменной окружения LD_TRACE_LOADED_OBJECTS в 1. Это заставляет компоновщик просмотреть динамические зависимости программы и найти (согласно правилам, описанным в ld.so(8)) и загрузить объекты, удовлетворяющие этим зависимостям. Для каждой зависимости ldd показывает расположение подошедшего объекта и адрес (шестнадцатеричный) загрузки (общие зависимости linux-vdso и ld-linux являются специальными; смотрите vdso(7) и ld.so(8)).

Безопасность

Be aware that in some circumstances (e.g., where the program specifies an ELF interpreter other than ld-linux.so), some versions of ldd may attempt to obtain the dependency information by attempting to directly execute the program, which may lead to the execution of whatever code is defined in the program's ELF interpreter, and perhaps to execution of the program itself. (Before glibc 2.27, the upstream ldd implementation did this for example, although most distributions provided a modified version that did not.)

Поэтому никогда не запускайте ldd для не доверенных исполняемых файлов, так как это может привести к выполнению произвольного кода. Безопасной альтернативой при работе с не доверенными исполняемыми файлами является команда:

$ objdump -p /путь/к/программе | grep NEEDED

Однако заметим, что эта альтернатива показывает только непосредственные зависимости исполняемого файла, а ldd показывает всё его дерево зависимостей.

ПАРАМЕТРЫ

       --version
              Выдать номер версии ldd.
 
       -v, --verbose
              Выдать всю информацию, включая, например, информацию о версии символов.
 
       -u, --unused
              Выдать неиспользуемые явные зависимости. (Начиная с glibc 2.3.4.)
 
       -d, --data-relocs
              Выполнить перемещения и показать все отсутствующие объекты (только для ELF).
 
       -r, --function-relocs
              Выполнить  перемещения  и  для  объектов  данных  и  для  функций,  и  показать все
              отсутствующие объекты или функции (только для ELF).
 
       --help Выдать справку по использованию.

ДЕФЕКТЫ

       ldd не работает с динамическими библиотеками в формате a.out.
 
       ldd не работает с некоторыми очень старыми a.out программами, которые были  скомпилированы
       до  добавления  поддержки  ldd  в  компиляторы. Если вы используете ldd для одной из таких
       программ, то будет предпринята попытка выполнить программу с argc = 0, и результаты  будут
       непредсказуемы.

СМ. ТАКЖЕ

       pldd(1), sprof(1), ld.so(8), ldconfig(8)
linux/libs/ldd.txt · Последние изменения: 2023/11/12 12:09 — werwolf