Подтвердить что ты не робот

Получить список статических библиотек, используемых в исполняемом файле

Так как ldd перечисляет только динамические библиотеки, есть ли способ извлечь информацию о статических библиотеках, используемых для создания исполняемого файла?

4b9b3361

Ответ 1

ldd <exe filename> показывает динамически связанные библиотеки

nm <exe filename> показывает символы в файле.

Чтобы узнать, какие символы поступают из статических библиотек, необходимо запустить nm для этих библиотек, чтобы получить в них список символов (функций и т.д.), а затем сравнить их с тем, что ваш список символов из nm <exe filename>.

Вы сравниваете списки с помощью команды comm. Подробнее см. man comm.

Это было взято с этого форума здесь.

Ответ 2

Нет, имена библиотек будут отброшены во время процесса связывания. Однако, если ваш исполняемый файл содержит информацию об отладке (т.е. Он был скомпилирован с флагом -g), вы можете получить информацию от этого.

Ответ 3

Если данный компилятор не хранит какие-то метаданные внутри двоичного файла, то нет. Статическая библиотека - это код, который непосредственно скомпилирован в двоичный файл.

Ответ 4

Если у вас есть исходный код и вы не хотите проходить весь код для этого, вы можете сгенерировать файл карты при компиляции, чтобы узнать, какие статические библиотеки связаны.

Например g++ -Xlinker -Map=a.map main.c, проверьте файл карты для связанной информации о статической библиотеке.

Ответ 5

Невозможно получить список статических библиотек внутри исполняемого файла ELF.

Потому что для компоновщика статическая библиотека просто используется как "ленивый" набор элементов. Таким образом, итоговый исполняемый файл ELF будет содержать только членов, необходимых для его соединения. Таким образом, члены, такие как foo2.o of libfoo.a, связаны так, как будто объектный файл foo2.o был связан с исполняемым файлом (если требуется некоторый символ, определенный в foo2, то есть где-то).

Конечно, использование nm или objdump или readelf, или strings для некоторых исполняемых файлов ELF может дать некоторые подсказки о том, какие объектные файлы (в том числе те, которые исходят из статических библиотек) находятся внутри него, потому что вы увидите символы, определенные в (членах) этих статических библиотек (или литеральные строки, используемые внутри них).