Найти библиотеки, с которыми был связан бинарный файл
Я знаю, что есть команда, которая перечисляет мне библиотеки и соответствующие версии, с которыми было связано программное обеспечение.
Что-то с ld или libtool?
Но я просто не могу вспомнить. Потратил некоторое время на Google, но не нашел ничего полезного.
Обновитьldd <binary>
поможет на Linux, ( от @ Ernelli), в то время как я обнаружил, что otool -L <binary>
делает что-то похожее на MacOS X.
4 ответа
Попробуй ldd binary-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)
Чтобы найти то, что ему нужно напрямую:
readelf -d APP | grep NEEDED
ldd
как упоминалось в другом месте, покажет все прямые и косвенные библиотеки - все, что нужно во время выполнения. Это может быть не полный список, так как вы можете динамически открывать вещи с помощью dlopen(), но это должно работать в 99% случаев.
ld и libtool используются во время компиляции / компоновки. Они бесполезны, когда у вас есть приложение.
РЕДАКТИРОВАТЬ Я вижу по последующим ответам, которые вы спрашивали о OSX, но я хочу добавить к своему ответу об инструментах Linux:
Одна вещь, которую я забыл упомянуть, довольно давно; Вы спрашивали о версиях. ни ldd
ни readelf
ответит на вопрос "какая версия". Они сообщат вам имя файла библиотеки, которую вы ищете, и соглашение об именах может иметь некоторую информацию о версии, но это никак не навязывается. Символы могут быть версионными, и вам придется намного ниже даже с nm
чтобы увидеть это,
Другой способ - использовать objdump.
objdump -x "двоичный" | ГРЕП НУЖЕН
Это показывает все необходимые зависимости только для этого двоичного файла. Очень полезно.
Другие ответы упускают важный момент:
Общие библиотеки могут быть связаны напрямую или косвенно через другую библиотеку.
Только для прямой ссылки :
objdump --private-headers "${bin}" | grep 'НУЖНО' | вырезать --delimiter=' '--fields=18-
Для всех :
ldd "${bin}" | вырезать --fields=2 | Cut --delimiter=' ' --fields=1 | рев | вырезать --delimiter='/' --fields=1 | рев | сортировать --unique --version-sort