Извлечение статически связало библиотеки от исполняемого файла

Это определенно pythonic. То, что можно возвратить несколько значений из функции шаблон, который Вы имели бы на языке как C, где необходимо определить структуру для каждой комбинации типов, Вы возвращаетесь куда-нибудь.

Однако, если Вы достигаете точки, куда Вы возвращаете что-то сумасшедшее как 10 значений от единственной функции, необходимо серьезно рассмотреть связывание их в классе, потому что в той точке это становится громоздким.

8
задан HyLian 13 November 2009 в 12:33
поделиться

3 ответа

Невероятно маловероятно, поскольку, как правило, вы не получаете все содержимое библиотеки, внедренное в ваш исполняемый файл.

Вы получаете только достаточно, чтобы удовлетворить все неопределенные символы. На самом деле это может быть лишь небольшая часть библиотеки. Библиотека обычно состоит из набора объектных файлов, из которых только те, которые требуются, связаны с вашим исполняемым файлом.

Например, если единственное, что вы вызывали в библиотеке времени выполнения C, было exit () , очень маловероятно, что в вашем исполняемом файле будет семейство функций printf () .

Если вы связались с объектными файлами напрямую, у вас может быть шанс, поскольку они будут включены независимо от того, используются ли или нет (если ваш компоновщик не умный).

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

Позвольте мне пояснить типичный процесс:

  1. Четыре объектных файла, ao , bo ], co и действительно содержат функции a () , b () , c () и d () соответственно. Они все добавлены в архив abcd.a .
  2. Все они автономны (без зависимостей), за исключением того факта, что b () вызывает c () .
  3. У вас есть основная программа, которая вызывает a () и b () , и вы компилируете ее, а затем связываете с библиотекой abcd.a . 1251] Компоновщик перетаскивает ao и bo из библиотеки в ваш исполняемый файл, удовлетворяя потребность в a () и b () , но вводит потребность в c () , потому что b () нуждается в этом.
  4. Компоновщик затем перетаскивает co из библиотеки в ваш исполняемый файл, удовлетворяющий потребность в c () . Теперь все неопределенные символы удовлетворены, исполняемый файл готов и очищен от пыли, вы можете запустить его, когда будете готовы.

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

Обновление: Re the "

15
ответ дан 5 December 2019 в 11:25
поделиться

Представьте, что у вас есть 10 книг на языке, который вы не понимаете, без обложек, титульных листов, номеров страниц и глав. Некоторые книги могут быть неполными. Все страницы перемешаны вместе, поэтому невозможно узнать, где находится начало и конец каждой книги. (Каждая страница является вызовом функции) Теперь попробуйте найти страницу 123 книги 5 (скажем, это упомянуто выше, функция Exit () ).

Что ж, ЭТО ВОЗМОЖНО ...

1
ответ дан 5 December 2019 в 11:25
поделиться

Похоже, вы просите декомпилятор. Такие инструменты сложно использовать (вероятно, невозможно для умеренно сложного C ++), и если есть какой-либо другой способ решения вашей проблемы, включая пару месяцев, чтобы переписать библиотеки, я бы рекомендовал этот курс действий.

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

-1
ответ дан 5 December 2019 в 11:25
поделиться