gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:56:29 25 4
gpt4 key购买 nike

确实有两个问题与 --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=分配,内容,加载,只读\
    --change-section-address .blob=地址\
    程序.elf 程序.blobbed.elf

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

我突然想到,我可以通过第二个链接来完成这一壮举,但 objcopy 会更干净。

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

更新:只要重新链接不会更改第一个链接生成的程序部分中的某些内容,最后一个策略可能是可行的。第一次尝试时不会出现这种情况,但也许可以解决它。因此,希望使用 --add-section 添加此 blob,而不是通过第二个链接。

最佳答案

您可以添加该部分,用 NUL 等填充它,然后计算您的 blob。然后将该 Blob 修补到此部分中。稍后,当您检查 ELF 的完整性时,就好像该部分充满了 NUL 一样,然后再次计算 blob。最后,比较计算出的 blob 和存储在部分中的 blob。

关于embedded - 如何使用 OBJCOPY 的 --add-section 开关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17823416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com