Найти библиотеки, с которыми был связан бинарный файл

40

Я знаю, что есть команда, которая перечисляет мне библиотеки и соответствующие версии, с которыми было связано программное обеспечение.

Что-то с ld или libtool?

Но я просто не могу вспомнить. Потратил некоторое время на Google, но не нашел ничего полезного.

Обновление
ldd <binary> помогло бы на Linux, ( от @ Ernelli ), в то время как я обнаружил, что otool -L <binary>делает что-то похожее на MacOS X.

er4z0r
источник
stackoverflow.com/questions/50159/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

42

Попробуй 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)
Ernelli
источник
Dang! Так что моя первая попытка была правильной. Просто нужно установить его на мой Mac, чтобы он точно знал команду ;-)
er4z0r
@ er4z0r: К вашему сведению, Mac OS - это BSD, а не Linux .
Гравитация
6
grwaity: вы правы Хотя ldd может помочь в Linux, я обнаружил, что 'otool -L <binary>' делает нечто подобное.
er4z0r
15

Чтобы найти то, что ему нужно:

readelf -d APP | grep NEEDED

lddкак упоминалось в другом месте, покажет все прямые и косвенные библиотеки - все, что нужно во время выполнения. Это может быть не полный список, так как вы можете динамически открывать вещи с помощью dlopen (), но это должно работать в 99% случаев.

ld и libtool используются во время компиляции / компоновки. Они бесполезны, когда у вас есть приложение.

РЕДАКТИРОВАТЬ Я вижу по последующим ответам, которые вы спрашивали о OSX, но я хочу добавить к своему ответу об инструментах Linux:

Одна вещь, которую я забыл упомянуть, довольно давно; Вы спрашивали о версиях. Ни тот, lddни другой не readelfответят на вопрос «какая версия». Они сообщат вам имя файла библиотеки, которую вы ищете, и соглашение об именах может иметь некоторую информацию о версии, но это никак не навязывается. Символы могут быть версионными, и вам понадобится гораздо более низкий уровень, nmчтобы увидеть их,

Рич Гомолка
источник
9

Другой способ - использовать objdump.

objdump -x "двоичный" | ГРЕП НУЖЕН

Это показывает все необходимые зависимости только для этого двоичного файла. Очень полезный.

Pranav
источник