Определение проблемы: мне нужно исправить файл эльфа.Этот файл elf создан из доступного исходного кода, который я разработал.У меня также есть файл компоновщика, который является стандартным примером для моей цели.
Задача состоит в том, чтобы при добавлении новой строки кода сохранить изменения (байтовые сдвиги) в файле elf как минимум.Когда я принимаю разницу в байтах между исходными и пропатченными файлами эльфов, желательно, чтобы первое вхождение байтового сдвига (причина новой строки кода) было ближе к концу файла эльфов.
Поэтому добавление нового текста и данныхраздел для патча является обязательным!Но эти разделы также находятся в конце файла эльфа.
Вот мои тестовые комбинации:
Что работает;
Когда я добавляю новую функциональность в любую функцию,Я перепишу эту функцию в новом исходном файле.И добавьте эту функцию в новый раздел с именем patchText (определенный в файле компоновщика) или что-то еще.Наконец, я меняю инструкцию вызова функции вручную, она работает!Но это руководство :( Есть ли способ сделать это автоматически?
Что не работает;
1) опция __attribute _ ((слабая)) -> Когда я ставлю свой код патча послеРаздел .bss или .data, компоновщик создает два исполняемых сегмента PT_LOAD.И когда я запускаю программу, она не работает!Потому что мой символ функции патча не может быть разрешен.Если я использую «слабый» атрибут без добавления нового раздела, он работает.Так есть ли какое-либо объяснение или комментарий по этому поводу?Что будет не так?или это возможно?
2) -Wl, -wrap, опция symboname: та же проблема, что и в «слабом».
Спасибо.