Intel Hex概述

什么是Intel Hex文件


Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件。在Intel HEX文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器能使用Intel HEX文件。



Intel HEX文件组成


Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列:


Start Code 每个Intel HEX记录都由冒号开头。

Byte count 是数据长度域,它代表记录当中数据字节的数量。

Address 是地址域,它代表记录当中数据的起始地址。

Record type是代表HEX记录类型的域,它可能是以下数据当中的一个:

00-数据记录

01-文件结束记录

02-扩展段地址记录

03-开始段地址记录

04-扩展线性地址记录

05-开始线性地址记录

Data 是数据域,一个记录可以有许多数据字节。记录当中数据字节的数量必须和数据长度域中指定的数字相符。

Checksum是校验和域,它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。


完整的hex文件一般有头行,数据行,结束行。

举个例子:

:020000042A00D0
:10000000D1DC4B843410D7730D000000FFFFFFFFDD
:10001000FFFFFFFF500000005000002AD8CB000077

:040000052A000000CD
:00000001FF


第一行(头行):

1) 02代表数据域长度为0x02,即2A 00两个字节都为数据域

2) 0000代表地址,对于扩展线性地址而言,这个值一直为0000

3) 04代表扩展线性地址

4) 2A 00代表基址值为0x2A 00

5) D0代表校验值

当扩展线性地址被读取时,扩展线性地址值将会被保存,并且作用于后面从intel hex文件读取的子记录,同时扩展线性地址将一直发挥作用直到下一次扩展性线性地址读取。


第二行(数据行):

1) 10代表数据域长度为0x10,即D1 DC 4B 84 34 10 D7 73 0D 00 00 00 FF FF FF FF 16个字节都为数据域

2) 0000代表地址偏移为0000

3) 00代表数据域

4) D1 DC 4B 84 34 10 D7 73 0D 00 00 00 FF FF FF FF 代表数据值

5) 77代表校验值

绝对地址记录是扩展线性基址加上地址偏移所决定的,这第二行的数据绝对地址计算如下:

          0000                                                地址偏移

2A00 扩展线性地址

-------------------

2A00 0000 绝对地址


倒数第二行(最后的数据行):

1) 04代表数据域长度为0x04,即2A 00 00 00 4个字节都为数据域

2) 0000代表地址偏移为0000

3) 05代表开始线性地址并且后面才是真正数据记录。而真正的数据记录个人理解为后面读取的mbn数据。

4) 2A 00 00 00 代表真正数据记录的基址

5) CD代表校验值


最后行(结束行):

1) 00代表数据域长度为0

2) 0000代表地址将放入到内存的位置

3) 01代表文件结束

4)FF校验值(01h + NOT(00h + 00h + 00h +01h))




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AndroidStudio+ideasmali动态调试smali汇编

0x00 前言 之前对于app反编译的smali汇编语言都是静态分析为主,加上一点ida6.6的动态调试,但是ida的调试smali真的像鸡肋一样,各种不爽,遇到混淆过的java代码就欲哭无泪了。后来知道IDEA用一款插件也可以实现smali的动态调试&a…

使用IDA Pro动态调试SO文件

(1)在IDA的安装路径中找到android_server文件。 (2)将android_server拷贝到手机的/data/local/tmp目录下面。 (3) 将手机插上电脑,打开命令提示符, 先输入”adb shell”,然后输入”…

c#调用c++dll接口及回调函数

在合作开发时,C#时常需要调用CDLL,当传递参数时时常遇到问题,尤其是传递和返回字符串是,现总结一下,分享给大家:VC中主要字符串类型为:LPSTR,LPCSTR, LPCTSTR, string, CString, LPCWSTR, LPWST…

机器学习或深度学习的数据读取工作(大数据处理)

机器学习或深度学习的数据读取工作(大数据处理)主要是.split和re.findall和glob.glob运用。 读取文件的路径(为了获得文件内容)和提取文件路径中感兴趣的东西(标签) 1,“glob.glob”用于读取文件路径 2,“.…

windows平台下的反调试技术

在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术&#…

SQLite加解密

0x00 SQLite概述 SQLite是一个轻量级、跨平台的,开源的数据库引擎,它在读写效率,消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案。 然而免费版的SQLite有一个致命缺点:不支持加…

android和linux操作系统的区别

Android是由Google为移动设备开发的开源操作系统。Android软件的原始开发商Android公司是由Google,Inc.于2005年购买的。它是基于Linux 2.6内核开发的。Linux操作系统于1991年由Linus Torvalds作为台式计算机的开源操作系统开发。Linux操作系统是作为MINIX操作系统开…

Android系统架构图

一、Aplications(应用层) 应用是用Java语言编写的云新在虚拟机上的程序。 二、Application Framework(应用框架层) 这一层是编写Google发布的核心应用时所使用的API框架,开发人员可以使用这些框架来开发自己的应用。 V…

SHA1算法实现及详解

1 SHA1算法简介 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息&…

CRC32算法实现

CRC32 检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域&…

AES算法重点详解和实现

可以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n,其它情况下加密数据长度等于16*(n1)。在不足16的整数倍的情况下,假如原始数据长度等于16*nm[其中m小于16]…

protobuf流的反解析Message

0x01 protobuf的基本概念 protobuf通过定义".proto"文件来描述数据的结构。.proto文件中用"Message"所表示所需要序列化的数据的格式。Message由field组成,Field类似JAVA或者C中成员变量,通常一个field的定义包含修饰符、类型、名称…

勒索病毒傀儡进程脱壳

样本是:wallet勒索病毒 环境:虚拟机VMWARE win7 32位 工具:OD,winhex 初次拿到样本,先用火绒剑工具监控下病毒样本的流程,可以看到有一个自创建进程的行为。 我们等找到OEP后,在CreateProcessA下…

arm64动态链接库通过函数名获取函数偏移

基本思路是分析elf文件, 首先遍历节区头部Elf32_Shdr查看sh_type属性值,得到属性值为SHT_DYNSYM的节区。 其次通过名字遍历节区结点,找到类型为STT_FUNC并且名字与其相同的结点。 代码如下: static void * xmalloc(size_t size) {void *p…

arm32和arm64常用指令B BL BLX机器码计算

现在大部分手机cpu架构是ARM v7-A和ARMV8-A,,在ARM-v7A中常使用32位ARM指令集并且支持thumb指令集与arm的切换,而在ARMV8中使用的是64位ARM指令集且不再有thumb指令集状态的切换了。在调用函数时,会有常用的调用方式:BL和B&#x…

arm shellcode 编写详析1

在编写arm shell code 之前,先介绍下arm中r0-r15寄存器的主要用途: Register Alt. Name Usage r0 a1 First function argument Integer function result Scratch register r1 a2 Second function …

arm shellcode 编写详析2

前一篇中介绍了arm shellcode基本用法,现在涉及到arm和thumb状态 在前一篇中默认为arm32模式: text:00008074 ; Segment type: Pure code .text:00008074 AREA .text, CODE .text:00008074 ; ORG 0x8074 .text:0000807…

openssl c++实现bouncycastle中AES加解密

0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。 它提供对对称、不对称、块和流密码的加密…

zlib数据格式及解压缩实现

0x01 zlib和其他压缩的魔术头 一般来说压缩文件都有个魔术头,用于区分不同的压缩文件对应不同的解压缩算法。 7z文件: 00000000 37 7A BC AF 27 1C 00 03 CD F7 CC 2E 66 6A 33 00 7z集 枉?fj3 tar.xz文件 00000000 FD 37 7A 58 5A 00 00 04 E6 D6 B4 …

python3 Crypto环境

前言 最开始想尝试在windows下面安装python3.6,虽然python安装成功,但在安装Cryto模块用pip3 install pycrypto老是会报错。老夫搞了半天,最终决定在linux下面去做。 以下流程限于linux系统: 0x00 安装python apt-get install p…