使用Libelf / Elfio库时出现问题:ELF不再可执行

时间:2012-06-08 08:13:13

标签: add executable elf

我正在使用Libelf和Elfio尝试为ELF文件添加新的部分。我希望它可执行,就像.text

这是我的问题:使用Libelf,只要我加载(elf_begin()),更新(elf_update())并释放(elf_end())我的ELF,它就会停止执行(启动时 seg fault )。 readelf -S显示部分,但也返回错误:

readelf: Warning: the .dynamic section is not contained within the dynamic segment

我没有在Libelf中找到任何功能来将.dynamic部分“添加”到DYNAMIC段。

但是我可以用Elfio(使用segment->add_section_index()函数)来做到这一点,但是我必须手动将每个其他部分添加到其他每个部分,因为Elfio似乎在加载ELF时会覆盖它们。

有没有人对这些图书馆有任何经验?

我的最终目标是能够在ELF中创建一个新的可执行部分,并修改其入口点以直接跳转并执行该部分,以便创建一个打包器。

1 个答案:

答案 0 :(得分:0)

Libelf不管理可执行ELF文件的段(即程序头条目)。但是,默认情况下,当您调用elf_update()时,它会重新布局这些部分。

重新布局后,程序头条目很可能包含过时的偏移量。 然后,加载器将尝试(或拒绝)从文件偏移中加载仅在编辑之前正确的部分。

因此错误消息:.dynamic部分现在位于文件中的另一个偏移处,并且加载程序注意到它不再位于DYNAMIC段中。

您可以通过调用elf_flagelf(elf, ELF_C_SET, ELF_F_LAYOUT)告诉Libelf您负责部分布局。

但是,再一次,添加一个新的部分将不再那么容易......