用于简单修改elf文件的工具?

时间:2010-10-01 20:40:16

标签: c embedded

我的嵌入式项目有一个后处理步骤,用Flash(某些部分)的CRC替换可执行文件中的值。此步骤只能在链接后完成,因为这是CRC图像的第一次机会。在过去,文件格式是COFF,我已经创建了一个自定义工具来进行修补。

开发工具已切换到ELF,因此我需要重新实现CRC修补程序。在我做之前,我以为我会寻找一个现有的工具来做到这一点。编译器基于gcc,但我看不到可以完成这项工作的ldnm以及readelf的任意组合。 Google的搜索效果不佳。

我现在的工具使用nm来查找要修补的地址,并使用地址,期望值(以防止覆盖错误的数据)和新的CRC值调用修补程序。 CRC是以可执行文件的“十六进制”格式计算的(我也补丁),所以我没必要重做那部分。

我可以再次使用libelf和自定义代码实现此功能,但在此之前,它是否已经存在?

有没有更好的方法来实现我的目标,即将可执行文件的CRC放入可执行文件中,以便应用程序可以使用它?

2 个答案:

答案 0 :(得分:4)

如果我已经理解你正在尝试做的事情,我认为以下方法可行:

  • nm为您提供要修补的位置的运行时虚拟地址;
  • readelf -S为您提供运行时虚拟地址和文件中每个部分开头的偏移量;
  • 将两者拼接在一起(例如,使用您喜欢的几行脚本语言),在文件中给出补丁补偿。

答案 1 :(得分:0)

我不确定这是否可行,但您可以对其进行排列,以便将目标文件中的CRC位置设置为外部符号 X 的地址。然后,最后一个链接步骤可以通过链接elf文件来满足该外部符号,该文件除了指定 X 的地址是您计算的CRC之外什么也没做。

这仍然非常hacky,我不确定它是否容易执行(因为它是滥用工具)。