linux - 修改 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 不使用任何可重定位地址等。所有地址都是内存中的物理地址。
有没有办法做到这一点?我只需要替换部分的内容并修改它的长度。
解决方案
如果其他更简单的方法不适合,您可以使用ELFIO库来实现此类功能。
推荐阅读
- reactjs - .NET Core 2.X MVC、React、Typescript、Webpack 配置
- google-cloud-storage - 如何从 Cloud Composer 网络服务器写入 dags 目录?
- angularjs - 如何从 angularjs 中的表单读取用户输入并创建 yaml?
- c# - 如何在 C# 中读取和写入文本文件的第一行?
- cuda - 我可以使用什么代替 LOP3 指令来处理 uint64_t 数据类型并使用一条指令执行 3 个操作数逻辑运算?
- java - Firebase 问题 java.lang.NoSuchMethodError: No virtual method zzbqp()Ljava/lang/String; 在 Lcom/google/firebase/FirebaseApp 类中;
- python - Tkinter 画布未在无限循环中更新
- php - Laravel 5.4 供应商发布组件不起作用
- angularjs - 在angularjs中关闭浏览器/选项卡时删除本地存储数据
- mysql - 无法使用 pymysql 从我的 sql 数据库中检索数据