首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用OBJCOPY的--附加开关?

如何使用OBJCOPY的--附加开关?
EN

Stack Overflow用户
提问于 2013-07-24 00:47:28
回答 2查看 8.1K关注 0票数 10

其实有两个问题围绕着-副段的使用。简单的一个在标题中。根据我的阅读,我还没有弄清楚如何才能执行--附加部分。

要使用加法段,我必须传递一个节名.如果我使用现有的节名,程序将响应为“不能添加节‘..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. 重新链接ELF文件,包括新的bob.o

更新:这最后一个策略可能是可行的,只要重新链接不改变程序中由第一个链接生成的部分中的某些内容。它不是在第一次尝试,但它可能是可能的工作,绕过它。因此,我们希望使用--添加部分来添加这个blob,而不是使用第二个链接。

EN

回答 2

Stack Overflow用户

发布于 2015-03-17 23:45:59

您可以添加该部分,用空填充,然后计算blob。然后把那个小块修补到这个区域。稍后,当您检查ELF的完整性时,请将该部分设置为满为空,并再次计算blob。最后,比较存储在部分中的计算blob和blob。

票数 4
EN

Stack Overflow用户

发布于 2013-11-08 23:01:47

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

我知道这不是你想做的,但这是一个非常简单和可靠的方法。并且具有工具链/平台不可知论的主要优点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17823416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档