HEX文件格式详解

之前写的比较随意,但发现查找该信息的同学还比较多。
所以文章后部分增加了通俗易懂的版本。便于同学们查阅。请往后看补充内容....
20180807110607274.png

********************

2018080711055121.png

如图,其中第一行020000040002f8中,可以看做是0x02 0x00 0x00 0x04 0x00 0x02 0xf8,其前四个字节和最后一个字节有特殊含义。中间为数据

第一个0×02表示该行数据中有两个数据

第二个,第三个0x00 0x00表示本行数据的起始地址位

第四个字节有0x00 0x01 0x02 0x03 0x04 0x05,分别有以下含义

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

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

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

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

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

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

最后一个字节0xf8为校验和。校验和= 0x100 - 累加和。在nodepad++中,如果该校验和不是绿色,则表示该校验和是错的。

注意,0×04标识扩展线性地址的记录,所以如上图中的020000040002f8中,拓展地址是0002。那么第二行数据的起始地址就是0002c000,即0x0002c000开始

 

补充内容开始:
前面记录的比较简单,但看起来还是不好理解,下面是详细通俗易懂版本的hex文件说明,应该能满足大部分同学的需要。

 2019092717414350.png

第一字节表示该行的数据字节数;如第1行只有 0x08 0x00 两个字节的数据,类型是 04 ,即该行记录的是一个拓展地址(0x08 0x00 是地址信息,用法是将该地址(0x0800<<16) 后作为基地址。并且表示在下一个04类型行出现之前都要使用该地址.

例如第2行的地址信息是 0x0000,则表示该行数据从0x08000000( (0x0800<<16) | 0x0000 )开始记录。

第3行则从 0x08000010 ( (0x0800<<16) | 0x0010 )开始记录。

另外最后一个字节的校验和 0xBA = 0xff & ( 0x100- (0x10+4*(0x00)+0x5F+0x00+...+0x00+0x08) ) = 0xff & (0x100-0x246);

没错,就是从每行的第一个字节开始计算。

 

 2019092717325511.png

小技巧: 在nodepad++中,如果校验和不是绿色,则表示校验和错误,如上图中的第6行.正确的应该是 BA

 

 20190927173845821.png

16行位置只有四个数据,但是 标注类型是 05, 即他是一个 “开始线性地址记录”。
说那么多,什么是开始线性地址记录呢?其实他就是函数入口地址
例如我的 .map 文件中可以看到以下信息

Memory Map of the image

  Image Entry point : 0x08020189
  ....
    __Vectors_End                            0x08020188   Data           0     ......
    __main                                        0x08020189   Thumb Code     0  entry.o(.ARM.Collect
00000000)
    _main_stk                                   0x08020189   Thumb Code     0  entry2.o(.ARM.Collect
00000001)
    _main_scatterload                      0x0802018d   Thumb Code     0  entry5.o(.ARM.Collect
00000004)
  ....

 

 20190927173044437.png

这一行就是类型是 0x01, 表示文件结束.

附nodepad++文件链接(无需积分): https://download.csdn.net/download/weixin_39752827/12106358

 ----------------------------------总是会自己变成需要积分下载的状态... 我修改了几次了,,再次上传网盘链接

链接:https://pan.baidu.com/s/1pZVNJiRBRWUKZa9igzfmWw
提取码:wrp8
————————————————
版权声明:本文为CSDN博主「林永康」的原创文章

原文链接:https://blog.csdn.net/weixin_39752827/article/details/81477686

版权声明:若无特殊注明,本文为《海盗船长》原创,转载请保留文章出处。
本文链接:https://www.progr.cn/post-139.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!