【发布时间】:2020-12-27 04:45:22
【问题描述】:
我有一个Intel Hex 格式的固件文件,它属于P80C528EBA microcontroller。该微控制器为 8 位 mC,基于 80C51 架构。
下面,你可以看到文件的前 5 行:
:llaaaattddddddcc
1 :03800000028100FA
2 :028003008028D3
3 :02800B00806093
4 :0280130080608B
5 :01801B003232
您可能知道并且我在上面添加了 Intel Hex 格式行的结构如下:
:llaaaattddddd..............cc
||||||||||| CC->Checksum
|||||||||DD->Data...
|||||||TT->Record Type
|||AAAA->Address
|LL->Record Length
:->Colon
正如您在我文件的前 5 行中看到的,第 2 行的 AAAA 值是 0x8003,它等于第 1 行的 LL + AAAA (0x03 + 0x8000 )。但是这种模式对于接下来的 3 行是不正确的。例如,对于第 3 行,我们期望 0x8005 等于 0x8003 + 0x02(AAAA + LL 第 2 行),但令人惊讶的是我们有 0x800B。我在这个文件中有大约 10 行错误的模式(大约有 2000 行)。
问题:这是否意味着文件已损坏并且某些行被删除?还是可以在 Intel Hex 格式的行之间留一些空洞(如上)?
【问题讨论】:
-
工具在转换为十六进制之前显示什么?你有什么文件格式选项。其余数据很可能被假定为零或全为 1。
-
请展示一个最小的完整示例、最小的源代码、用于生成某些输出的工具以及用于将其转换为 hex 文件的工具。当您将中间文件与 hex 文件等进行比较时所看到的,或者可能是什么工具使用了这个 hex 文件等......
-
intel hex 格式与此处无关,它只是一种表示与地址相关的数据的方式,重要的是生成它的工具和为用例使用它的工具。 “intel hex 文件格式”只是表示地址和数据的一种方式,它对于您可以用它表示什么或如何表示没有更大的规则,该格式不控制行外或行间发生的事情(除了地址如何可以扩展,但这里不相关)。
-
对任意数量的能够解释 HEX 格式的阅读器进行快速检查会告诉您该文件在内部是一致的。
标签: microcontroller intel disassembly firmware