首页 > 解决方案 > 修改 ELF 中数据部分的内容

问题描述

我有一个将数组初始化为 0 的程序。我使用以下方法将该数组的值指向自定义部分:__attribute__((section(".mysection")))

struct my_struct my_array[1] __attribute__((section(".mysection"))) = {
    {0, 0},
};

以上只是为了让我们有一个默认值,链接器将该部分标记为可加载,并将其包含在适当的部分列表中。

现在我希望编辑生成的 ELF 并根据我的选择修改该结构的内容。我已经有一个二进制文件,其中包含我希望该部分的内容。我尝试使用 --remove-section 和 --add-section 但无法强制新部分成为部分的一部分。

不确定 --update-section 在这里是否有帮助,但是我拥有的微控制器在 objcopy 中没有 --update-section 并且当我尝试它的公共版本时,它表示它不支持 bfd 目标。

FWIW,ELF 不使用任何可重定位地址等。所有地址都是内存中的物理地址。

有没有办法做到这一点?我只需要替换部分的内容并修改它的长度。

标签: linuxexecutableelf

解决方案


如果其他更简单的方法不适合,您可以使用ELFIO库来实现此类功能。


推荐阅读