我正在使用Libelf和Elfio尝试在ELF文件中添加一个新的部分。我希望它是可执行的,就像.text。
这是我的问题:对于Libelf,一旦我加载(elf_begin())、更新(elf_update())和发布(elf_end()),它就停止成为可执行的(启动时的seg错误)。readelf -S显示节,但也返回错误:
readelf: Warning: the .dynamic section is not contained within the dynamic segment我没有在Libelf中找到任何函数将.dynamic部分“添加”到DYNAMIC段中。
但是我可以使用Elfio (使用segment->add_section_index()函数)来实现这一点,但是我必须手动地将每一个其他部分添加到其他每个段中,因为在加载ELF时,Elfio似乎要覆盖它们。
有人对那些图书馆有经验吗?
我的最终目标是能够在ELF中创建一个新的可执行部分,并修改它的入口点以直接跳转和执行新的部分,以便创建一个封隔器。
发布于 2012-07-04 15:47:04
Libelf不管理可执行ELF文件的段(即程序头条目)。但是,在默认情况下,当您调用elf_update()时,它会重新布局这些部分。
重新布局之后,程序头条目很可能包含过时的偏移量.然后,加载程序将尝试(或拒绝)从文件偏移量加载仅在编辑之前才正确的部分。
因此,错误消息:.dynamic部分现在位于文件中的另一个偏移量,加载程序注意到它已经不在动态段中了。
您可以通过调用elf_flagelf(elf, ELF_C_SET, ELF_F_LAYOUT)告诉Libelf您负责部分布局。
但是再一次,增加一个新的部分不再那么容易了.
https://stackoverflow.com/questions/10945239
复制相似问题