Как изменить файл ELF с помощью Python - PullRequest
1 голос
/ 04 октября 2019

Я пытаюсь, скажем, изменить .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-скрипт, который проверяет, являются ли исходный эльф и новый (отредактированный сейчас) эльфами одинаковыми. Кажется, работает.

1 Ответ

0 голосов
/ 04 октября 2019

Ответ на повторяющийся вопрос предполагает, что это невозможно. pyelftools для анализа файлов ELF, а не их изменения. Однако пакет elffile может помочь с изменениями.

...