1

我正在尝试.text使用 python 修改 ELF 文件的段。我成功地获得了 .text 字段,所以我可以简单地更改我想要的位。问题是它pyelftools没有提供任何从 ELF 对象生成 ELF 文件的方法。

所以我尝试的是以下内容:

我在 中创建了一个简单的 helloworld 程序c,对其进行编译并获得了a.out文件。然后我用它pyelftools来拆卸它。

4

1 回答 1

0

要更改/编辑 ELF 文件的任何部分,我只需使用pyelftools'sELFFile类方法来获取字段的 (i)offset和 (ii) size。那么我就知道在哪里查看二进制文件了。

因此,在获得字段 (A,B) 的值边距后,我只是将文件视为普通二进制文件。我唯一做的file.seek(A)就是将文件指针移动到我希望修改的特定部分。

def edit_elf_section(elf_object,original_file,section):
    
    elf_section = elf_object.get_section_by_name(section) 
                                             # !! IMPORTANT !!
    section_start = elf_section['sh_offset'] # NOT sh_addr. sh_addr is the logical address of the section
    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

要验证结果,您可以使用diff二进制文件来查看文件是否相同

于 2021-10-02T11:26:39.823 回答