您好!
我知道 CRC 执行过程中有类似的线程、这些线程有助于我了解如何执行 CRC 执行。
用例
因此、从技术角度而言、我要尝试对可执行文件的校准区域中的某些校准值进行一些更改、 然后重新计算完整校准区域的 CRC 并将原始 CRC 替换为新的 CRC、以便映像仍然有效、就像由链接器自身生成一样。 我在 MATLAB 中执行了一个脚本、该脚本提取十六进制的校准区域、然后生成一个 CRC64。
验证
为了首先验证我的实施是否正常、我使用了具有相同算法的在线站点、并使用了在类似线程中提出的 pycrc 工具、我针对不同输入获得完全相同的结果。
问题
我 已经在 原始十六进制文件上运行此脚本、以便能够将映射文件中生成的原始 CRC 与我的实现方式进行比较、但这不会提供如下所示的相同结果。

现在令人困惑的是、当我将 CAL 区域中的所有参数值设置为零时、链接器仍会生成 CRC、默认情况下、CAL 区域包含一些值、如下所示:

此时、使用我的脚本提取默认值并运行算法的实现、我将获得与链接器在映射文件中生成的 CRC 值完全相同的 CRC 值。
我已经尝试更改 区域内的1或2个值、其他所有值都设置为0、我仍然可以匹配生成的 CRC、但我无法判断它在哪里/为什么随校准值的完整数据集而变化。
我的假设是链接器将获取该区域内的所有参数、从0x2c0000一直到0x2c8f00、每次8字节、交换端字节序32位。
_CAL_CRC_TABLE @ 002fffe0记录:1、大小/记录:24、表大小:32
.CALMEMORY:ALCOALM=TMS570_CRC64_ISO (ID=10)、LOAD ADDR=002c0000、SIZE=00008f00、CRC=e94b9294676180be
有人知道我是否需要了解某些对齐要求或填充要求?