Intel HEX文件格式分析 - crystal521(云淡风轻)的专栏 - CSDNBlog正在处理中,请稍后…… crystal521(云淡风轻)的专栏 ★ 【云淡风轻 草新柳茂】★crystal521 登录注册 全站 当前博客 空间博客好友相册留言陈伟ID:crystal521 [修改头像] 共38099次访问,排名2441(1)好友25人,关注者17人 云淡去,风轻拂 crystal521的文章 原创 29 篇 翻译 0 篇 转载 11 篇 评论 31 篇 crystal521的公告 i find the great thing in this world is not so much where we stand as in what directiong we are moving ,to reach the port of the heaven ,we must sail sometimes with the wind ,and sometimes against it ,but we must sail ,not drift nor lie at anchor.    年 月 [下月] [上月] 日一二三四五六 123 45678910 11121314151617 18192021222324 25262728293031 直接页面点击 最近评论 archangelwin:支持.... crystal521:多媒体定时器的定时是比较高,一般在1ms左右! tomsoft:茴香豆有四种写法, 所以还应该有一种方法: 使用多媒体定时器:timeSetEvent, 效率比CreateThread更高; zhongyunde:有 C 程序 判断是否为正确的 Intel HEX文件吗 ? LoveBluck:现在的木马技术越来越强了,作为软件编写人员最重要的还是写出优秀的代码,保证自己的代码安全可靠! 软件项目交易 订阅我的博客 文章分类 c/c++,MFC/STL(RSS) object pascal/Delphi/Octane(RSS) 数据库开发(RSS) 涂鸦杂记(RSS) 网络管理和安全配置及编程(RSS) 硬件/系统编程,单片机/驱动(RSS) 资料收集(RSS) 收藏 相册 云淡风轻 驱动开发链接 心情小驿站 存档 2008年03月(1) 2007年11月(2) 2007年03月(5) 2007年01月(2) 2006年11月(1) 2006年10月(4) 2006年09月(2) 2006年08月(4) 2006年06月(2) 2006年02月(1) 2005年10月(3) 2005年09月(2) 2005年07月(1) 2005年06月(4) 2005年03月(1) 2004年12月(2) 2004年10月(2) 2004年09月(1) Intel HEX文件格式分析 新一篇: "0x........"指令引用的"0x00000000"内存,该内存不能为"read"之解决方案 最近工作中遇到了几块芯片数据需要分析,由于原芯片文件为HEX文件,这是一个无头绪的工作,没有数据含义的资料,需要这些数据按地址解码后重组,然后面对的将是无数次未知的猜测、组合。于是在查阅了大量的HEX文件的资料,现将Hex文件的格式整理如下: Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。 :llaaaatt[dd...]cc 如下图所示: :<0x3a> ll[数据长度1Byte] aaaa[数据地址2Byte] tt[数据类型1Byte] [dd...][数据nByte] cc[校验1Byte] 回车<0x0d> 换行<0x0a> 例如::1000000018F09FE518F09FE518F09FE518F09FE5C0按照上面的数据行格式分析如下: <0x3a> [数据长度1Byte]10 [数据地址2Byte]00 00 [数据类型1Byte]00 [数据nByte]18F09FE518F09FE518F09FE518F09FE5 [校验1Byte]C0 <0x0d> <0x0a> 每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每行中的数据并不是一定有的,第二个字节数据长度为0,那么这行就没有数据。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: : 每个Intel HEX记录都由冒号(0x3a)开头。 回车换行符0x0d, 0x0a 每行Intel HEX记录为结束。每行开始和结束之间的所有内容,都是以字符形式表现的。 ll 是数据长度域,它代表记录当中数据字节(dd)的数量. aaaa 是地址域,它代表记录当中数据的起始地址,地址都是先显示高位,后显示 低位. tt 是代表HEX记录类型的域,它可能是以下数据当中的一个: 00 – 数据记录 01 – 文件结束记录 02 – 扩展段地址记录 04 – 扩展线性地址记录 dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符. cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足. 数据记录 Intel HEX文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下: :10246200464C5549442050524F46494C4500464C33 其中: 10 是这个记录当中数据字节的数量. 2462 是数据将被下载到存储器当中的地址. 00 是记录类型(数据记录) 464C…464C是数据. 33 是这个记录的校验和. 扩展线性地址记录(HEX386) 扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录包含数据地址的高16位.扩展线性地址记录总是有两个数据字节,外观如下: :02000004FFFFFC 其中: 02 是这个记录当中数据字节的数量. 0000 是地址域,对于扩展线性地址记录,这个域总是0000. 04 是记录类型 04(扩展线性地址记录) FFFF 是地址的高16位. FC 是这个记录的校验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh). 当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.线性地址保持有效,直到它被另外一个扩展地址记录所改变. 通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址. 以下的例子演示了这个过程.. 来自数据记录地址域的地址 2462 扩展线性地址记录的数据域 + FFFF ------------ 绝对存储器地址 FFFF2462 扩展段地址记录(HEX86) 扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.扩展段地址记录总是有两个数据字节,外观如下: :020000021200EA 其中: 02 是记录当中数据字节的数量. 0000 是地址域.对于扩展段地址记录,这个域总是0000. 02 是记录类型 02(扩展段地址记录) 1200 是地址段. EA 是这个记录的校验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h). 当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.段地址保持有效,直到它被另外一个扩展地址记录所改变. 通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址. 以下的例子演示了这个过程.. 来自数据记录地址域的地址 2462 扩展段地址记录数据域 + 1200 --------- 绝对存储器地址 00014462 校验和的算法:计算从0x3A 以后(不包括0x3A)的所有各字节的和是取记录中从数据字节计数域(ll)到数据域(...)最后一个字节的所有字节总和的2的补码。 文件结束(EOF)记录 Intel HEX文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下: :00000001FF 其中: 00 是记录当中数据字节的数量. 0000 是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址. 01 是记录类型 01(文件结束记录) FF 是这个记录的校验和,计算方法如下: 01h + NOT(00h + 00h + 00h + 01h). Intel HEX文件例子: 下面是一个完整的Intel HEX文件的例子: :10001300AC12AD13AE10AF1112002F8E0E8F0F2244 :10000300E50B250DF509E50A350CF5081200132259 :03000000020023D8 :0C002300787FE4F6D8FD7581130200031D :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 :04003F00A42EFE22CB :00000001FF 发表于 @ 2006年06月30日 16:08:00|评论(1)|编辑 旧一篇: [原创]微软中国研究院面试题的思考...... 东方标准 Java高端培训 精深核心技术讲解 真实企业案例驱动 有效的面试强化训练 国内外终身就业支持 想让界面开发变得更轻松吗? Skin++将助你一臂之力, 提高您的开发效率与界面效果。评论 #zhongyunde 发表于2007-07-25 21:18:38 IP: 210.27.8.* 有 C 程序 判断是否为正确的 Intel HEX文件吗 ?发表评论 姓 名:请输入名字 主 页: 校验码: 检验码无效! 看不清,换一张 请输入评论 当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录 Csdn Blog version 3.1a Copyright © crystal521