1

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

这是我的问题:使用Libelf,一旦我加载(elf_begin())、更新(elf_update())和释放(elf_end())我的ELF,它就停止可执行(启动时出现段错误)。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 中创建一个新的可执行部分,并修改其入口点以跳转并直接执行该新部分,以创建一个打包程序。

4

1 回答 1

1

Libelf 不管理可执行 ELF 文件的段(即程序头条目)。但是,默认情况下,它会在您调用elf_update().

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

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

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

但是话又说回来,添加一个新部分将不再那么容易了......

于 2012-07-04T15:47:04.347 回答