Здесь показаны различия между двумя версиями данной страницы.
|
linux:libs:ldd [2023/11/12 12:01] werwolf создано |
linux:libs:ldd [2023/11/12 12:09] (текущий) werwolf |
||
|---|---|---|---|
| Строка 12: | Строка 12: | ||
| === ОПИСАНИЕ === | === ОПИСАНИЕ === | ||
| + | Программа **ldd** выдаёт список общих объектов (общих библиотек), которые требуются для каждой из заданных в командной строке программы или общего объекта. Пример использования и результат работы: | ||
| <code bash> | <code bash> | ||
| + | $ 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) | ||
| + | </code> | ||
| - | $ ldd /bin/ls | + | Обычно, **ldd** вызывает стандартный динамический компоновщик (смотрите ld.so(8)), установив значение переменной окружения **LD_TRACE_LOADED_OBJECTS** в 1. Это заставляет компоновщик просмотреть динамические зависимости программы и найти (согласно правилам, описанным в **ld.so**(8)) и загрузить объекты, удовлетворяющие этим зависимостям. Для каждой зависимости **ldd** показывает расположение подошедшего объекта и адрес (шестнадцатеричный) загрузки (общие зависимости **linux-vdso** и **ld-linux** являются специальными; смотрите **vdso**(7) и **ld.so**(8)). |
| - | 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)). | + | |
| - | Безопасность | + | <note> |
| - | Be aware that in some circumstances (e.g., where the program specifies an ELF interpreter | + | 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.) |
| - | other than ld-linux.so), some versions of ldd may attempt to obtain the dependency | + | </note> |
| - | 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 для недоверенных исполняемых файлов, так как это может | + | Поэтому никогда не запускайте **ldd** для не доверенных исполняемых файлов, так как это может привести к выполнению произвольного кода. Безопасной альтернативой при работе с не доверенными исполняемыми файлами является команда: |
| - | привести к выполнению произвольного кода. Безопасной альтернативой при работе с | + | |
| - | недоверенными исполняемыми файлами является команда: | + | |
| - | $ objdump -p /путь/к/программе | grep NEEDED | + | <code bash> |
| - | + | $ objdump -p /путь/к/программе | grep NEEDED | |
| - | Однако заметим, что эта альтернатива показывает только непосредственные зависимости | + | |
| - | исполняемого файла, а ldd показывает всё его дерево зависимостей. | + | |
| </code> | </code> | ||
| + | |||
| + | Однако заметим, что эта альтернатива показывает только непосредственные зависимости исполняемого файла, а **ldd** показывает всё его дерево зависимостей. | ||
| === ПАРАМЕТРЫ === | === ПАРАМЕТРЫ === | ||