1

问:我在机器上运行了一个十六进制代码。如何在运行时计算整个代码的校验和?

4

1 回答 1

5

您需要对整个代码段具有读取权限。这可能涉及从链接器获取引用代码的第一个和最后一个地址的符号。您可以将这些地址转换为适当大小的数据指针,并在代码段上运行您想要的任何常见 CRC 或校验和算法。

要验证CRC,您需要知道它的权威值。这可以在链接之后通过计算 CRC 并将其修补到初始化程序中以获得合适的变量来完成。

在嵌入式系统中,我在现场升级更换固件之前使用了类似的技术作为完整性检查,我通常将固件映像的内存映射安排为以只读数据结构开始。编写一个实用程序来计算图像的 CRC 并修复结构很容易。然后嵌入式系统的引导加载程序可以在引导期间验证 CRC 以确定是否存在有效固件,如果不存在则回退到更新实用程序。当然,更新实用程序在刷新之前使用相同的 CRC 来验证新映像。

编辑:关于 CRC 的一些参考资料,以防有帮助:

于 2009-03-27T06:37:19.217 回答