软件断点对Checksum的影响
首先讲述下checksum的原理:
1.代码在编译完成之后会用专门的工具计算出RAM代码的checksum值,这个工具有addsum,python可以平替此软件。
2.软件中开辟专门的地址并使用外部脚本存放生成的checksum值,一般使用hexview。
3.软件模块计算对应RAM区的checksum值,注意此区域包含脚本生成的checksum值。
4.静态和动态的值对比,结果一致表示软件行为正常。
断点调试:
项目使用过程中debug发现软件计算值无法和脚本生成值匹配。
问题分析:
①数据类型的问题导致数值溢出
比如使用的是32位的MCU,使用USHORT作为check值存放计算结果,此结果最大值为0xFFFF。MCU对溢出的值计算时会保证32位数据正常,所以排除数据位的影响。
②多分区计算多个checksum值
多分区的时候发现多个断点值能算出正确的checksum值,未发现根本原因,怀疑是S32K118芯片的限制,使用64KB作为分区。
③软件断点过多
打一个断点时dump数据与下载的源文件对比,发现源码被修改。此时checksum值计算正确。
打多个断点时计算checksum值异常。
结论:
软件断点过多对RAM区产生影响,从而导致checksum的值错误。