Q值。 我在机器上运行了十六进制代码。如何在运行时计算整个代码的校验和?
答案 0 :(得分:5)
您需要具有对整个代码段的读取权限。这可能涉及从链接器获取引用代码的第一个和最后一个地址的符号。您可以将这些地址转换为适当大小的数据指针,并在代码段上运行您想要的任何常见CRC或校验和算法。
要验证CRC,您需要知道其权威值。这可以在链接之后通过计算CRC并将其修补到初始化器中以获得合适的变量来完成。
在嵌入式系统中,我在更换现场升级中的固件之前使用了类似的技术作为完整性检查,我通常会将固件图像的存储器映射安排为只读数据结构。编写实用程序来计算图像的CRC并修复结构很容易。然后,嵌入式系统的引导加载程序可以在引导期间验证CRC以确定是否存在有效固件,如果不存在则返回到更新实用程序。当然,更新实用程序使用相同的CRC在闪烁之前验证新图像。
编辑:有关CRC的一些参考资料,以防有用: