Исправление ELF с минимальным количеством изменений в байтах - PullRequest
0 голосов
/ 22 ноября 2018

Определение проблемы: мне нужно исправить файл эльфа.Этот файл elf создан из доступного исходного кода, который я разработал.У меня также есть файл компоновщика, который является стандартным примером для моей цели.

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

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

Вот мои тестовые комбинации:

Что работает;

Когда я добавляю новую функциональность в любую функцию,Я перепишу эту функцию в новом исходном файле.И добавьте эту функцию в новый раздел с именем patchText (определенный в файле компоновщика) или что-то еще.Наконец, я меняю инструкцию вызова функции вручную, она работает!Но это руководство :( Есть ли способ сделать это автоматически?

Что не работает;

1) опция __attribute _ ((слабая)) -> Когда я ставлю свой код патча послеРаздел .bss или .data, компоновщик создает два исполняемых сегмента PT_LOAD.И когда я запускаю программу, она не работает!Потому что мой символ функции патча не может быть разрешен.Если я использую «слабый» атрибут без добавления нового раздела, он работает.Так есть ли какое-либо объяснение или комментарий по этому поводу?Что будет не так?или это возможно?

2) -Wl, -wrap, опция symboname: та же проблема, что и в «слабом».

Спасибо.

...