Невероятно маловероятно, поскольку, как правило, вы не получаете все содержимое библиотеки, внедренное в ваш исполняемый файл.
Вы получаете достаточно, чтобы удовлетворить все неопределенные символы. На самом деле это может быть только небольшая часть библиотеки. Библиотека обычно состоит из набора объектных файлов, из которых только те, которые требуются, связаны с вашим исполняемым файлом.
Например, если бы единственная вещь, которую вы вызывали в библиотеке времени выполнения C, была exit()
, вы вряд ли бы имели семейство функций printf()
в вашем исполняемом файле.
Если вы связались с объектными файлами напрямую, у вас может быть шанс, поскольку они будут включены, используются ли они или нет (если ваш компоновщик не является умным).
Но даже это будет геркулесовой задачей, поскольку в исполняемом файле может отсутствовать информация о том, какие разделы кода получены из конкретных объектных файлов. Это потенциально выполнимо, но, если есть другой способ, я бы сначала посмотрел на это.
Позвольте мне уточнить типичный процесс:
- Четыре объектных файла,
a.o
, b.o
, c.o
и d.o
содержат функции a()
, b()
, c()
и d()
соответственно. Они все добавлены в архив abcd.a
.
- Все они автономны (без зависимостей), за исключением того факта, что
b()
вызывает c()
.
- У вас есть основная программа, которая вызывает
a()
и b()
, и вы компилируете ее, а затем связываете ее с библиотекой abcd.a
.
- Компоновщик перетаскивает
a.o
и b.o
из библиотеки в ваш исполняемый файл, удовлетворяя потребность в a()
и b()
, но вводя потребность в c()
, потому что b()
это нужно.
- Затем компоновщик перетаскивает
c.o
из библиотеки в ваш исполняемый файл, удовлетворяя потребность в c()
. Теперь все неопределенные символы удовлетворены, исполняемый файл готов и очищен, вы можете запустить его, когда будете готовы.
Ни на одном из этапов этого процесса d.o
не было перетащено в ваш исполняемый файл, поэтому у вас нет надежды получить его.
Обновление: Re "если есть другой способ, я бы посмотрел на этот первый" комментарий, который я сделал выше, вы только что заявили в комментарии к одному из другие ответы, что у вас есть исходный код, который сделал библиотеки, которые вы хотите извлечь. Мне нужно спросить: почему вы не можете перестроить библиотеки с этим источником? Это кажется мне гораздо более простым решением, чем попытка воссоздать библиотеки из болота исполняемого кода.