天天看点

HEX文件解析

开头数据:

:020000041004E6

:1000000000800020119B0510AD8D0510A98F0410F4

每行从“:”(0x3a)开始,这从文件内容可以看出。以回车键结束(0x0d,0x0a),每行以换行结束。回车换行的十六进制不会显示。

现在开始解析:第一句

后面的数据位数 数据起始地址 数据类型或叫功能码 数据 校验位
0x02 0x00 0x00 0x04 0x10 0x04 0xE6

数据类型共有:

'00'Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录

'01'文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾

'02'扩展段地址记录:用来标识扩展段地址的记录

'03'开始段地址记录:开始段地址记录

'04'扩展线性地址记录:用来标识扩展线性地址的记录

'05'开始线性地址记录:开始线性地址记录

在文件中主要是0x00。

现在的0x04,即该行记录的是一个拓展地址(0x10 0x04 是地址信息,用法是将该地址(0x1004<<16) 后作为基地址。并且表示在下一个04类型行出现之前都要使用该地址.也就是下一句的地址0x00 0x00,起始地址就是从0x10040000开始。

第二句:
0x10 0x00 00800020119B0510AD8D0510A98F0410(十六进制) 0xF4
后面数据16位,起止地址为0x10040000,类型记录数据

结尾数据:

:04000005100400C122

:00000001FF

0x05 100400C1 0x22

数据类型0x05,开始线性地址记录,就是函数入口地址

在map文件可以看到    __main                                   0x100400c1   Thumb Code     8  __main.o(!!!main)

数据对应着地址。

0x01 FF

最后一个教校验计算:0xF4 = 0xff & ( 0x100- (0x10+4*(0x00)+0x80+0x00+...+0x04+0x10) )