我的嵌入式项目有一个后处理步骤,用闪存的某些部分的CRC替换可执行文件中的值.此步骤只能在链接后完成,因为这是CRC图像的第一次机会.在过去,文件格式是COFF,我已经创建了一个自定义工具来进行修补.
开发工具已切换到ELF,因此我需要重新实现CRC修补程序.在我做之前,我以为我会寻找一个现有的工具来做到这一点.编译器基于GCC,但我看不到任何的组合ld和nm和readelf可以做的工作.Google的搜索效果不佳.
我现在的工具用于nm查找要修补的地址,并使用地址,期望值(以防止覆盖错误的数据)和新的CRC值调用修补程序.CRC是以可执行文件的"十六进制"格式计算的(我也补丁),所以幸运的是我没有重做那部分.
我可以libelf再次使用和自定义代码实现此功能,但在此之前,它是否已经存在?
有没有更好的方法来实现我的目标,即将可执行文件的CRC放入可执行文件中,以便应用程序可以使用它?
如果我理解你想要正确执行的操作,我认为以下内容会起作用:
nm为您提供要修补的位置的运行时虚拟地址;readelf -S为您提供运行时虚拟地址和文件内每个部分开头的偏移量;