![Найти библиотеки, с которыми был связан двоичный файл](https://rvso.com/image/1263781/%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8%2C%20%D1%81%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%BC%D0%B8%20%D0%B1%D1%8B%D0%BB%20%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%20%D0%B4%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D1%84%D0%B0%D0%B9%D0%BB.png)
Я знаю, что есть команда, которая выводит список библиотек и соответствующих версий, с которыми было связано программное обеспечение.
Что-то с ld или libtool?
Но я просто не могу вспомнить. Потратил некоторое время на гугл, но ничего полезного не нашел.
Обновлять
ldd <binary>
помогло бы на linux, (от@Эрнелли) хотя я обнаружил, что это otool -L <binary>
делает что-то похожее на MacOS X.
решение1
Попробуйте лдддвоичный-exec
Пример:
~$ ldd /bin/bash
linux-gate.so.1 => (0x00606000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
/lib/ld-linux.so.2 (0x00a41000)
решение2
Чтобы найти то, что ему непосредственно нужно:
readelf -d APP | grep NEEDED
ldd
как упоминалось в другом месте, покажет все прямые и косвенные библиотеки - все, что нужно во время выполнения. Это может быть неполный список, так как вы можете динамически открывать вещи с помощью dlopen(), но это должно работать в 99% случаев.
ld и libtool используются во время компиляции/линковки. Они бесполезны, если у вас есть приложение.
РЕДАКТИРОВАТЬИз последующих ответов я вижу, что вы спрашивали об OSX, но я хочу добавить к своему ответу об инструментах Linux:
Я забыл упомянуть одну вещь, довольно давно; вы спрашивали о версиях. Ни то, ни ldd
другое readelf
не ответят на вопрос «какая версия». Они сообщат вам имя файла библиотеки, которую вы ищете, и соглашение об именовании может содержать некоторую информацию о версии, но ничто не навязывает это. Символы могут иметь версии, и вам придется много знать о еще более низком уровне, чтобы nm
увидеть их,
решение3
Другой способ — использовать objdump.
objdump -x "двоичный" | grep НУЖЕН
Это показывает все необходимые зависимости только для этого двоичного файла. Очень полезно.
решение4
Theдругие ответыупускаем важный момент:
Общие библиотеки могут бытьнапрямуюсвязаны иликосвенносвязано через другую библиотеку.
Только длянапрямую связан:
objdump --private-headers "${bin}" | grep 'НУЖНО' | cut --delimiter=' ' --fields=18-
Длявсе:
ldd "${bin}" | вырезать --fields=2 | вырезать --delimiter=' ' --fields=1 | rev | вырезать --delimiter='/' --fields=1 | rev | сортировать --unique --version-sort