如何使用 Python 修改 ELF 文件

How to MODIFY an ELF file with Python

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

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

我在 c 中创建了一个简单的 helloworld 程序,编译它并得到 a.out 文件。然后我用pyelftools反汇编了

到 change/edit ELF 文件的任何部分,我只是使用 pyelftoolsELFFile class 方法来获取字段的 (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 二进制文件来查看文件 are/aren 不相同