2013-03-29 2 views
0

Я пишу небольшой инструмент для инструментов. Я должен вставить подпрограмму инструментария в двоичный файл. Хороший подход должен заключаться в том, чтобы вставить эти процедуры в отдельный сегмент кода и отдельный сегмент данных, не могли бы вы объяснить, как это сделать? Как я могу изменить размер сегмента кода в исходном файле?Как продлить двоичный файл ELF

Бест,

+0

Почему вы не делаете, что во время выполнения с помощью вставляя? 'LD_PRELOAD' на Linux,' DYLD_INSERT_LIBRARIES' на OS X и т. Д. Работает просто отлично. – 2013-03-29 12:01:25

ответ

1

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

Что такое binary file? Существует big разница между выполнением этого для объекта с возможностью перемещения (ET_REL), а также для выполнения полностью связанного исполняемого файла (ET_EXEC) или общей библиотеки (ET_DYN).

Вы могли бы объяснить, как это осуществить?

Для ET_REL, она должна быть достаточно прямолинейно: вы читаете заголовок файла, который указывает на заголовки разделов, который говорит вам, где .data и .text секции. Затем вы пишете новый файл, расширяете разделы, которые хотите, копируете все остальное и настраиваете заголовки разделов, чтобы отражать новые смещения и размеры разделов.

Для ET_DYN или ET_EXEC, проблема, скорее всего, слишком трудно: вам нужно настроить переезд таблицу, хэш-таблицу, программные заголовки; сохраняя все структуры самосогласованными и правильно выровненными.

1

В презентации Black Hat Шон Clowes, Shaun принимает две стратегии в отношении к внесению изменений в ELF исполняемого файла:

  • В патче файла - делать это за счетом расширения сегмента

  • В ядре патч («на лету») - делает это, пользуясь преимуществом на пространстве памяти , доступным из-за выравнивания сегмента.

Это называется "Black Hat USA 2002 - Закрепление/проделывания отверстий в Binaries" (Youtube)