gpt4 book ai didi

elf - 如何从 ELF 二进制文件中删除程序头

转载 作者:行者123 更新时间:2023-12-04 17:56:32 28 4
gpt4 key购买 nike

我想编写一个实用程序来从 ELF 二进制文件中删除程序头。例如,当我运行 readelf -l/my/elf 时,我会得到所有程序头的列表:PHDR INTERP ... GNU_STACK GNU_RELRO。当我运行我的实用程序时,我想以相同的顺序恢复所有相同的程序头,减去我删除的那个。有没有比从头开始重新创建整个 ELF 更简单的方法,跳过不需要的标题?

最佳答案

Is there any easier way to do this than recreated the entire ELF from scratch



当然:程序头在 ehdr.e_phoff 给定的偏移处形成一个固定记录表,包含 .e_phnum .e_phentsize 的条目字节。

要删除一个条目,只需将其余条目复制到它上面,然后递减 .e_phnum .这里的所有都是它的。

注意:删除一些条目可能会导致动态加载器崩溃。 GNU_STACK是唯一可以删除而不会造成太大伤害的标题(我能想到的)。

更新:

是的,设置 .p_typePT_NULL是另一种(更简单的)方法。但是这些条目通常不会出现,您可能会发现某些系统中 PT_NULL将在加载器(或其他程序)中触发断言。

最后,添加一个新的 Phdr可能很棘手。通常没有空间来扩展表(因为它后面紧跟着一些其他数据,例如 .text )。您可以将表重定位到文件末尾,并设置 .e_phoff.e_phnum对应于新表,但许多程序期望整个 Phdr要在运行时加载和可用的表,这不容易安排,因为文件末尾的新位置不会被任何 PT_LOAD“覆盖”。部分。

关于elf - 如何从 ELF 二进制文件中删除程序头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877492/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com