Я пытаюсь, скажем, изменить .text сегмент ELF-файла, используя python.
Я успешно получил поле .text, поэтому я могу просто изменить нужный бит.
Дело в том, что pyelftools не предоставляет никакого способа для создания файла ELF из объекта ELF.
Итак, я попробовал следующее:
Я создал простую программу helloworld на c,скомпилировал его и получил файл a.out.
Затем я использовал pyelftools для его разборки
[РЕШЕНИЕ] : Чтобы изменить / отредактировать любой раздел файла ELF, я просто использовал методы класса ELFFile в pyelftools, чтобы получитьсмещение и размер поля. Тогда я точно знаю, где искать внутри двоичного файла.
Итак, после получения значений полей поля (A, B) я просто перемещал файл как обычный двоичный файл. Единственное, что я сделал, это сделал file.seek (A), чтобы переместить указатель файла на конкретный раздел, который я хочу изменить.
В любом случае, спасибо за ваши комментарии.
def edit_elf_section(elf_object,original_file,section):
elf_section = elf_object.get_section_by_name(section)
section_start = elf_section['sh_offset'] # NOT sh_addr
section_end = section_start + elf_section['sh_size']
original_file.seek(section_start)
# Write whatever you want to the file #
assert(original_file.tell() <= section_end) # You've written outside the section
Для проверки результатов я создал простой bash-скрипт, который проверяет, являются ли исходный эльф и новый (отредактированный сейчас) эльфами одинаковыми. Кажется, работает.