我正在尝试.text
使用 python 修改 ELF 文件的段。我成功地获得了 .text 字段,所以我可以简单地更改我想要的位。问题是它pyelftools
没有提供任何从 ELF 对象生成 ELF 文件的方法。
所以我尝试的是以下内容:
我在 中创建了一个简单的 helloworld 程序c
,对其进行编译并获得了a.out
文件。然后我用它pyelftools
来拆卸它。
我正在尝试.text
使用 python 修改 ELF 文件的段。我成功地获得了 .text 字段,所以我可以简单地更改我想要的位。问题是它pyelftools
没有提供任何从 ELF 对象生成 ELF 文件的方法。
所以我尝试的是以下内容:
我在 中创建了一个简单的 helloworld 程序c
,对其进行编译并获得了a.out
文件。然后我用它pyelftools
来拆卸它。
要更改/编辑 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
二进制文件来查看文件是否相同