如何使用 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 文件的任何部分,我只是使用 pyelftools
的 ELFFile
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 不相同
我正在尝试使用 python 修改 ELF 文件的 .text
段。
我成功获取了 .text 字段,这样我就可以简单地更改我想要的位。问题是 pyelftools
没有提供任何从 ELF 对象生成 ELF 文件的方法。
所以我尝试的是以下内容:
我在 c
中创建了一个简单的 helloworld 程序,编译它并得到 a.out
文件。然后我用pyelftools
反汇编了
到 change/edit ELF 文件的任何部分,我只是使用 pyelftools
的 ELFFile
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 不相同