如何使用objcopy或libelf将elf文件的一部分替换为另一部分,以便将其加载到内存中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用objcopy或libelf将elf文件的一部分替换为另一部分,以便将其加载到内存中?相关的知识,希望对你有一定的参考价值。

我有一个项目,我需要删除ELF文件的一部分,并将其替换为略有修改内容的另一部分。我能够首先删除原始部分,然后使用objcopy添加我想要的部分。但我总是得到警告:

 warning: allocated section `.nv_fatbin' not in segment

这导致该部分没有被加载到存储器中,因此不能实现期望的功能。

添加它并将其重新带入细分市场的最佳方式是什么?

自由?或者这可以使用objcopy来实现吗?

答案

您可能想要使用objcopy的--update-section选项。

从objcopy手册(https://sourceware.org/binutils/docs/binutils/objcopy.html)中提取:

--update-section sectionname = filename

使用文件filename的内容替换名为sectionname的节的现有内容。该部分的大小将调整为文件的大小。 sectionname的section标志将保持不变。对于ELF格式文件,段到段的映射也将保持不变,这是使用--remove-section后跟--add-section无法实现的。该选项可以多次指定。

注意:这需要binutils v2.26或更高版本。

以上是关于如何使用objcopy或libelf将elf文件的一部分替换为另一部分,以便将其加载到内存中?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 objcopy 炸毁文件?

如何从填充部分停止 objcopy

led部分Makefile

如何仅提取 ELF 部分的原始内容?

使用 objcopy 将文本文件添加到二进制文件,但 objcopy 抱怨架构

objdump 和 objcopy 作为 c/c++ 库