我的嵌入式项目有一个后处理步骤,用闪存(某些部分)的 CRC 替换可执行文件中的值。此步骤只能在链接后完成,因为这是对图像进行 CRC 校验的第一次机会。过去的文件格式是 COFF,我创建了一个自定义工具来进行修补。
开发工具已经切换到ELF,需要重新实现CRC patcher。在我这样做之前,我想我会寻找一个现有的工具来做到这一点。编译器基于 gcc,但我看不到 ld
和 nm
以及 readelf
的任何组合可以完成这项工作。谷歌搜索没有结果。
我目前的工具使用 nm
找到要修补的地址,并使用地址、预期值(以防止覆盖错误数据)和新的 CRC 值调用修补程序。 CRC 是根据可执行文件(我也修补过)的“十六进制”格式计算的,所以幸运的是我不必重做那部分。
我可以再次使用 libelf
和自定义代码实现它,但在我这样做之前,它是否已经存在?
有没有更好的方法来实现我将可执行文件的 CRC 放入可执行文件以便应用程序可用的目标?
最佳答案
如果我理解了您要正确执行的操作,我认为以下方法会起作用:
nm
为您提供要修补位置的运行时虚拟地址;readelf -S
为您提供每个部分开头的运行时虚拟地址和文件内的偏移量;- 将两者拼接在一起(例如,使用您最喜欢的脚本语言的几行代码)给出要修补的文件内的偏移量。
关于c - 简单修改elf文件的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842904/