【问题标题】:Trouble using Libelf/Elfio libraries : ELF not executable anymore使用 Libelf/Elfio 库时遇到问题:ELF 不再可执行
【发布时间】:2012-06-08 08:13:12
【问题描述】:

我正在使用 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 中创建一个新的可执行节,并修改其入口点以跳转并直接执行该新节,从而创建一个打包器。

【问题讨论】:

    标签: add executable elf


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回答。所以我可以“手动”重新布局这些部分,它应该可以工作吗?
    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2013-02-08
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多