其实有两个问题围绕着-副段的使用。简单的一个在标题中。根据我的阅读,我还没有弄清楚如何才能执行--附加部分。
要使用加法段,我必须传递一个节名.如果我使用现有的节名,程序将响应为“不能添加节‘..data’:文件格式错误”。也许我只需要传递另一个参数。如果我使用一个新的节名(我更喜欢这样做),就会警告我“已分配的部分'.blob‘不在段中。”
现在,我已经得到了我的功能工作,因为我需要它除了“不在段”警告。我想找出是否有合法的方法将这个blob放入可执行文件中。我会将其链接到其中,但这并不容易,因为我要添加的数据是从可执行文件本身的内容生成的。
第二个问题是我真正关心的是什么。在链接完成后才能计算blob,是否有办法执行以下操作?
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会更干净。
更新:这最后一个策略可能是可行的,只要重新链接不改变程序中由第一个链接生成的部分中的某些内容。它不是在第一次尝试,但它可能是可能的工作,绕过它。因此,我们希望使用--添加部分来添加这个blob,而不是使用第二个链接。
发布于 2015-03-17 23:45:59
您可以添加该部分,用空填充,然后计算blob。然后把那个小块修补到这个区域。稍后,当您检查ELF的完整性时,请将该部分设置为满为空,并再次计算blob。最后,比较存储在部分中的计算blob和blob。
发布于 2013-11-08 23:01:47
没有具体回答您的问题,但是我过去用于这类事情的一种方法是在占位符块中链接,然后在之后修补正确的值。
我知道这不是你想做的,但这是一个非常简单和可靠的方法。并且具有工具链/平台不可知论的主要优点。
https://stackoverflow.com/questions/17823416
复制相似问题