я должен вставить рутину приборного в бинарном файле. Хороший подход должен заключаться в том, чтобы вставить эти подпрограммы в отдельный сегмент кода и отдельный сегмент данных
Что такое binary file
? Существует big разница между выполнением этого для объекта с возможностью перемещения (ET_REL
), а также для выполнения полностью связанного исполняемого файла (ET_EXEC
) или общей библиотеки (ET_DYN
).
Вы могли бы объяснить, как это осуществить?
Для ET_REL
, она должна быть достаточно прямолинейно: вы читаете заголовок файла, который указывает на заголовки разделов, который говорит вам, где .data
и .text
секции. Затем вы пишете новый файл, расширяете разделы, которые хотите, копируете все остальное и настраиваете заголовки разделов, чтобы отражать новые смещения и размеры разделов.
Для ET_DYN
или ET_EXEC
, проблема, скорее всего, слишком трудно: вам нужно настроить переезд таблицу, хэш-таблицу, программные заголовки; сохраняя все структуры самосогласованными и правильно выровненными.
Почему вы не делаете, что во время выполнения с помощью вставляя? 'LD_PRELOAD' на Linux,' DYLD_INSERT_LIBRARIES' на OS X и т. Д. Работает просто отлично. – 2013-03-29 12:01:25