如何使用OBJCOPY的--add-section开关?

use*_*958 5 embedded linker-scripts binutils

确实有两个问题与--add-section的使用有关。简单的标题中。根据我的阅读,我还无法弄清楚如何执行--add-section。

要使用add-section,我必须传递一个部分名称。如果我使用现有的节名称,程序将响应“无法添加节'.data':文件格式错误”。也许我只需要传递另一个参数。如果我希望使用新的节名称,则会警告“分配的节'.blob'不在段中”。

现在,除了“不在细分市场”警告之外,我还需要我的功能才能正常工作。我想弄清楚是否存在将这个Blob放入可执行文件的合法方法。我会链接进去,但这不是那么容易,因为我要添加的数据是从可执行文件本身的内容生成的。

第二个问题确实是我关心的问题。给定链接完成后才能计算blob,有没有一种方法可以执行以下操作。

  1. 链接ELF文件
  2. 从ELF文件和其他数据生成Blob
  3. 将blob添加到ELF文件,以便在运行时将其加载到内存中的正确位置

    objcopy --add-section .blob=blob.o \ --set-section-flags .blob=alloc,contents,load,readonly \ --change-section-address .blob=ADDRESS \ program.elf program.blobbed.elf

我很乐意将一部分和/或片段添加到ELF文件中,作为链接的一部分,并在其中插入该blob。我不确定该怎么做。

我想到可以通过第二个链接来完成此任务,但是objcopy会更干净。

  1. 链接ELF文件
  2. 从ELF文件和其他数据生成Blob
  3. 重新链接包括新的blob.o的ELF文件

更新:只要重新链接在第一个链接所产生的程序部分中没有改变,则最后一种策略可能是可行的。它不是第一次尝试,但是有可能解决它。因此,希望使用--add-section来添加该blob而不是通过第二个链接。

Joh*_*ney 0

没有具体回答您的问题,但我用于此类事情的一种方法是链接到占位符块中,然后在之后修补正确的值。

我知道这不是您想要做的,但这是一种非常简单且可靠的方法。其主要优点是与工具链/平台无关。