Hex文件分析

来源:互联网 发布:mac怎么选中不同文字 编辑:程序博客网 时间:2024/06/14 13:52

Hex格式文件有两种,一种是Intel的Intel HEX,另一种是Motorola(摩托罗拉)的SREC(又称MOT)。

Intel HEX

IntelHEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个ASCII HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。

//Intel HEX格式

//行数据

:   10   0000  00  C2020000C2020000C2020000C2020000  E0


iHex文件一行为单位,分为6个部分。

第一部分是iHEX文件的起始格式,文件一开始应该是一个冒号作为起点;

第二部分的两码所代表的是该行总共具备多少个字节的数据,是第五部分包含多少字节的数据;以本行为例,应该有16个字节,因为10H换算成十进制应该是16;

第三部分的四码所代表的地址域是放置数据的开始位置,本行的数据应该是放置在0000H~000FH 这段地址中;

第四部分的两码是检查码,所代表的是该行数据类型。数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。

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

'01'End of File Record:用来标识文件结束,放在文件的最后,标识HEX文件的结尾

'02'Extended Segment Address Record:用来标识扩展段地址的记录

'03'Start Segment Address Record:开始段地址记录

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

'05'Start Linear Address Record:开始线性地址记录

 其中:

'02'类型数据区的地址信息需要左移4位得到'基'地址。

'03'类型数据区的地址信息就是'基'地址。

'04'类型数据区的地址信息需要左移16位得到'基'地址。

         :  02   0000   04  0060    9A

         '基'地址是(0x0060<<16)=0x00600000,后面的数据记录都以这个地址为基地址,知道下一个扩展线性地址。

'05'类型数据区的地址信息就是'基'地址。

对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。

 

(扩展线性地址记录也叫32位地址记录或HEX386记录。这些记录包含数据地址的高16位)

(扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段)

 

第五部分则为数据存放区,本行总共32码16个字节

第六部分为校验值,校验值是一种标准的校验码,把它加在每一行的最后,可以使每一行所有的十六进制值(两个为一组),加总后所得到最后两位十六进制码应为00H。

每个HEX格式的最后一行都是固定为::00000001FF

 

Elf文件可以使用命令“objcopy -O ihex Test.elf Test.ihex”转换成Intel Hex文件。


 SREC

SREC全称Motorola S-record,一种文件格式,由摩托罗拉创建的,该文件使用ASCII HEX文件格式表达二进制信息。这种格式也叫做SRECORD, SREC, S19, S28, S37。通常用于微控制器编程,EPROMs和其他可编程的逻辑器件。在通常的应用中,编译器或汇编器将程序的源代码(如C语言或汇编语言)转换成机器代码,并将其输出到一个HEX文件。然后这个HEX文件被程序员烧写到ROM中,或者转移到目标系统用于装载和执行。

//SREC格式

//第一行数据

S0  0F  0000     636B3631302D6C2E73686578          0C

//行数据

S2  08  010000   FFFFFFFF                          FA

S3  15  08640000 6C0264086C0264086C0264086C026408  16

S5  03  0002                                        FA

S7  05  08640214                                     78


SREC文件一行为单位,分为5个部分。分别是记录类型域、字节数域、地址域、数据域、校验域。

第一部分类型域是SREC文件的起始标志,代表该行的类型,必须已S开始,值可以是从S0到S9;

类型

作用

(Record Purpose)

地址域范围

(AddressField)

是否有数据域

描述

S0

文件头标识记录

16-bit,地址域必须是“0000”

此记录包含表示为一系列的十六进制数字对供应商特定的ASCII文本。可以是以下信息的混合:文件/模块名称,版本/版本号,日期/时间,产品名称,供应商名称,PCB上的内存标志,版权声明。

S1

数据记录

16-bit

该记录的地址域16-bit,数据域=字节数域的值-3

S2

数据记录

24-bit

该记录的地址域24-bit,数据域=字节数域的值-4

S3

数据记录

32-bit

该记录的地址域32-bit,数据域=字节数域的值-5

S4

保留

S5

统计数据个数的记录

16-bit

该记录用于统计之前的数据记录(S1、S2、S3)的个数。最大值为0xFFFF,超过了使用S6

S6

统计数据个数的记录

24-bit

该记录用于统计之前的数据记录(S1、S2、S3)的个数。最大值为0xFFFFFF,小于0xFFFF使用S5。该值目前还不确定是否正式的。

S7

运行记录

32-bit

该记录用于记录程序启动的位置

S8

运行记录

24bit

该记录用于记录程序启动的位置

S9

运行记录

16bit

该记录用于记录程序启动的位置

PS:HEX文件每行是ASCII HEX,因此一个字符占4-bit。

 

第二部分字节数域是每行记录的长度,地址域、数据域、校验域三个域的长度,单位为字节数。

第三部分地址域,该域的长度取决于第一部分类型域。

第四部分数据域,该自动长度=字节数域的值-地址域长度-1(校验域长度)

第五部分校验域,该域长度为1byte(16-bit),校验方法是:除了类型域的值其他十六进制值每两个一组相加结果末两位为0xFF。

 

Elf文件可以使用命令“objcopy -O srec Test.elf Test.srec”转换成SREC Hex文件。




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微销通提示网络请求失败怎么办 苹果手机出现不停播报情况怎么办 手做俯卧撑抬不起来怎么办 如果qq号被冻结了怎么办 买的qq号被冻结怎么办 联想平板怎么下载东西怎么办 所有浏览器都安装不了怎么办 忘记微博登录邮箱怎么办 丰巢验证码丢了怎么办 微博昵称忘了怎么办 163邮箱账号忘记了怎么办 苹果手机id邮箱忘记了怎么办 微信号没注销了怎么办 微信昵称换不了怎么办 微博支付密码忘记怎么办 微博支付密码忘记了怎么办 华为手机看不见截屏怎么办 支付宝密码错误被锁定怎么办 实名身份证的微信限额怎么办 工行网银登陆密码忘了怎么办 美亚买的东西坏了怎么办 海带宝转运到香港怎么办 海带宝转运仓库入库错误怎么办 三星s7edge密码忘了怎么办 ie网页被拦截了怎么办 手机打开百度网页弹出广告怎么办 网站策略服务已被禁用怎么办 谷歌浏览器打不开网页怎么办 mac用户名密码忘记了怎么办 苹果7网速太慢怎么办 ps中图片选不中怎么办 加装硬盘不显示怎么办 win10网络无权限访问怎么办 电脑装机时c盘隐藏怎么办 word不允许修改锁定了是怎么办 word文档只读不能编辑怎么办 word无法读取文档时怎么办 ps超出2g存不了怎么办 qq帐号不记得了怎么办 苹果手机wifi密码输错怎么办 qq搜索关键字屏蔽了怎么办