Я хочу узнать список динамических библиотек, которые бинарные загружаются при запуске (с их полными путями). Я использую CentOS 6.0. Как это сделать?
executable
libraries
dynamic-linking
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
источник
lld
Дарвин, похоже, и я не могу найти его с помощью доморощенного.otool -L <path-to-binary>
ldd
. См человека стр .readelf -d $executable | grep 'NEEDED'
Может использоваться, если вы не можете запустить исполняемый файл, например, если он был кросс-скомпилирован, или если вы не доверяете ему:
Пример:
Образец выхода:
Обратите внимание, что библиотеки могут зависеть от других библиотек, поэтому теперь вам нужно найти зависимости.
Наивный подход, который часто работает:
но более точный метод - понять
ldd
путь поиска / кеш. Я думаю, чтоldconfig
это путь.Выберите один и повторите:
Образец вывода:
И так далее.
Смотрите также:
/proc/<pid>/maps
для запуска процессовУпомянутый Basile , это полезно, чтобы найти все библиотеки, которые в данный момент используются исполняемыми файлами. Например:
показывает все загруженные в данный момент динамические зависимости
init
(PID1
):Этот метод также показывает библиотеки, открытые с
dlopen
помощью этой минимальной установки, взломанной с помощьюsleep(1000)
Ubuntu 18.04.См. Также: Как просмотреть загруженные в данный момент общие объекты в Linux? | Супер пользователь
источник
ldd и lsof показывают библиотеки, загруженные напрямую или в данный момент . Они не учитывают библиотеки, загруженные
dlopen
(или удаленныеdlclose
). Вы можете получить лучшее представление об этом, используяstrace
, например,(поскольку, в
dlopen
конечном счете, вызовыopen
- хотя у вас может быть система, использующая разные имена для 64-битных открытий ...).Пример:
показывает мне это:
из которого можно извлечь имена ".so", чтобы просто увидеть общие объекты.
источник
strace -e trace=open,openat myprogram
/proc/<pid>/maps
также показываетdlopen
libs btw : unix.stackexchange.com/questions/120015/…ltrace -S
вывод еще круче, поскольку он отображает как системные вызовы, так и вызовы библиотек, такие какdlopen
: unix.stackexchange.com/questions/226524/…lsof также может показать вам, какие библиотеки используются для одного конкретного процесса.
т.е.
источник
Для процесса pid 1234 вы также можете прочитать
/proc/1234/maps
(текстовый) псевдофайл (read proc (5) ...) или использовать pmap (1)Это дает виртуальное адресное пространство этого процесса, следовательно, файлы (включая общие библиотеки, даже dlopen (3) -ed), которые отображаются в память
(конечно, используйте
ps aux
или pgrep (1), чтобы найти процессы, выполняющие какую-то данную программу)источник
Для массового запроса:
создайте небольшой скрипт (
useslib
) и вставьте его в переменную PATH (или укажите полный путь в приведенной ниже команде)Используйте его в
find
команде, например:(libgtk-x11-2.0, похоже, библиотека gtk2)
источник
Возможно использование
pmap
.Например, запустите процесс:
$ watch date
Получить pid:
$ ps -ef | grep watch
Показать карту памяти:
$ pmap <pid>
Показать с полным путем:
$ pmap <pid> -p
источник