我正在使用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中创建一个新的可执行部分,并修改其入口点以直接跳转并执行该部分,以便创建一个打包器。
答案 0 :(得分:0)
Libelf不管理可执行ELF文件的段(即程序头条目)。但是,默认情况下,当您调用elf_update()
时,它会重新布局这些部分。
重新布局后,程序头条目很可能包含过时的偏移量。 然后,加载器将尝试(或拒绝)从文件偏移中加载仅在编辑之前正确的部分。
因此错误消息:.dynamic部分现在位于文件中的另一个偏移处,并且加载程序注意到它不再位于DYNAMIC段中。
您可以通过调用elf_flagelf(elf, ELF_C_SET, ELF_F_LAYOUT)
告诉Libelf您负责部分布局。
但是,再一次,添加一个新的部分将不再那么容易......