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文件。
- Intel Hex 文件分析
- HEX文件分析
- Hex文件分析
- HEX BIN文件 分析介绍
- 关于HEX与BIN文件分析
- intel-extended格式的hex文件分析
- HEX 文件
- 记一次resources.arsc文件hex修改原理分析
- Intel HEX文件格式分析
- PIC HEX文件格式分析
- PIC HEX文件格式分析
- 什么是HEX文件
- hex文件结构
- IAR生产HEX文件
- 打包hex文件
- .hex 文件详解 stm32
- .hex 文件详解 stm32
- 关于IAREWSTM8 HEX文件
- 小猴子下落nyoj63(一道可以直接写的好题)
- Android的消息处理机制(图+源码分析)——Looper,Handler,Message
- 浅谈jms之(通过spring整合activeMQ实现jms)实例
- 反射和内省
- swift开发之coredata数据存取(1)
- Hex文件分析
- tomcat 增大jvm内存、增大连接数
- poj_2503 哈希
- rabbitmq安装后无法启动
- Android 第三方jar包
- java多线程
- (1) Hive ----- 使用记录(一)
- wince/windows mobile 6.5 各个平台方案评估
- IT研发核心课程系列——移动互联网产品团队的敏捷开发之路