hex文件、out文件、bin文件、map文件解析
【1】“hex文件”内容解析
hex文件是Intel公司提出的按地址排列的数据信息格式,数据宽度为字节,所有数据使用十六进制数字表示,并且以ASCII码的形式,按行记录数据。(即hex文件是用ASCII来表示二进制的数值)通常用于传输将被存于ROM或这EPROM中的程序和数据。
hex文件每一行均以“:”开头,表明记录的开始,“:”之后,每至少2个字符表示一组十六进制数据,格式形如:LLAAAATTDD....DDCC。
“:”、“LL”、“TT”、“CC”占1个字节;“AAAA”占两个字节;“DD....DD”占0 ~ N个字节
一旦出现段地址或者线性地址,之后所有数据都要加偏移地址,直到出现一个新的段地址或者线性地址,再重新变更偏移地址。
数据物理地址 = 线性地址左移16位+段地址左移4位+偏移地址。
示例:
:020000040108EA 线性偏移地址:0x0108
:0200000212FFBD 扩展段地址:0x12FF
:0401000090FFAA5502 数据地址:0x0100
基地址:0108左移16位为0x01080000;
扩展段地址:12FF左移4位为0x00012FF0;
下一行数据的偏移地址:0x0100
实际物理地址:0x01080000 + 0x00012FF0 + 0x0100 = 0x010930F0
举例分析:某工程代码的hex文件局部内容:
:02000004003DBD①
:04801000007DF9A155②
:20801200FF5A8EA4C5A492ABEC079CFF88A992859687000EFFFE92AB88A9A9A90FA6EC10AE③
:2080220093AAEC0EA9A99DFF5CA876BFFFFE92859687000EFFFE92859687000CFFF88AA043④
…
:200EC4008E77003D8E7E003D8E86003D8EB5003D8EE4003D8EFB003D8F2A003D8F5A003D21
:140ED4008F8A003D8FB9003D8FE8003D9017003D9046003D84
:00000001FF
1.:02000004003DBD(实质为“十六进制”表达形式:0x02,0x00,0x00,0x04,0x00,0x3D,0xBD)
释义:02表示该行数据的长度(字节数);
0000表示该行数据的起始地址(若该行数据的数据类型为00,则为偏移地址);
04表示该行数据的数据类型[1];
0x00,0x3D为数据[2];
0xBD为校验和[3]。
2.每行数据的起始地址计算:
第①行数据基地址(首行):0x0000 +(0x003D << 16)= 0x003D0000
第②行数据基地址:0x003D0000 + 0x8010 = 0x003D8010
第③行数据基地址:0x003D0000 + 0x8012 = 0x003D8012
第④行数据基地址:0x003D0000 + 0x8022 = 0x003D8022
注释:[1].“00”Data Rrecord:数据记录
“01”End of File Record::表征该.hex文件结束
“02”Extended Segment Address Record:标识扩展段地址记录
(后面所有数据地址需要加上段地址左移4位)
“03”Start Segment Address Record:起始/开始段地址记录
(大部分hex中不使用该记录类型,关于该记录类型的描述很少,具体作用不详)
“04”Extended Linear Address Record:标识扩展线性地址记录
(后面所有数据地址+线性地址左移16位,将该地址左移16 位后作为基地址,并且表示在下一个04类型行出现之前都要使用该地址作为基地址来使用。)
“05”Start Linear Address Record:起始/开始线性地址记录
(程序/函数入口地址,程序入口地址未必是main函数地址)
[2]. 十六进制数据:字节顺序根据芯片大小端和字长决定。
处理器若为大端存储,高字节在前,低字节在后(如NXP的5744P);
小端存储,则低字节在前,高字节在后(如STM32、DSP)。
示例:: 0401000090FFAA5502
大端存储的处理器内存中表示:
内存地址 |
数据 |
0x0109F1 |
0x90 |
0x0109F2 |
0xFF |
0x0109F3 |
0xAA |
0x0109F4 |
0x55 |
常用的X86结构是小端模式,而KEIL C51为大端模式。很多ARM、DSP均为小端模式。部分ARM处理器可以随时在程序中(ARM Cortex系列使用REV、REV16、REVSH指令)进行大小端的切换。
[3].校验和计算方式:0x0100与除校验字节外所有字节累加和(不计进位)的差值。
例:0xBD = 0x0100 –(0x02 + 0x00 + 0x00 + 0x04 + 0x00 + 0x3D)
3.hex文件与bin文件格式区别:
hex文件包括地址信息(烧写或下载hex文件,一般不需要用户指定地址),bin文件格式只包括数据本身(烧写bin文件时,用户需要指定地址信息)。
【2】“out”文件内容解析
.out文件是由类似Unix的操作系统(如Linux和AIX)中的各种源代码编辑器创建的编译可执行文件。可以存储可执行代码、共享库或目标代码。(当今.out文件慢慢被COFF(公共对象文件格式)格式所取代)
【3】“bin”文件内容解析
bin文件是最纯粹的二进制机器代码。或者说是"顺序格式",按照assembly code顺序翻译成binary machine code,内部没有地址标记。bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。
简单总结一下这两种文件格式的区别:
1、hex文件包含地址信息而bin文件只包含数据本身,烧写或下载hex文件时,一般不需要用户指定地址,因为hex文件内部已经包含了地址信息。烧写bin文件时则需要用户指定烧录的地址信息。
2、hex文件是用ASCII码来表示二进制的数值。例如8-BIT的二进制数值0x4E,用ASCII来表示就需要分别表示字符‘4’和字符‘E’,每个字符均需要一个字节,因此hex文件至少需要2倍bin文件的空间。
3、hex可以直接转换为bin文件,但是bin文件要转化为hex文件必须要给定一个基地址。
【4】“map”文件内容解析
map文件是CCS软件编译后产生的有关DSP用到所有程序、数据及IO空间的一种映射文件。
map文件大概分为文件头、内存配置、段映射、全局符号四部分。
注释:
1. 内存配置与cmd文件中的MEMORY指令关联,在cmd文件中定义的程序与数据区间定义,在该部分均可以找到对应,与cmd文件不同的是,在map文件中加入了一个实际使用的区间,即在程序中实际用到的空间长度。
2. 段映射部分与cmd文件中的SECTION指令关联,在该部分程序中所有的段实际映射的起始地址与实际长度均有详细说明。可以具体到程序中PROGMA指定的段和各个单独文件产生的obj文件。
3. 全局符号可以是程序使用的每一个函数、程序中定义的全局变量均可以在此找到对应的起始地址。map文件中采用两种方式列举,一种为按相应地址排列,另一种按全局符号字母排列。
hex文件、out文件、bin文件、map文件解析相关推荐
- 为什么vsdebug没有生成obj文件_VS中bin和obj文件引发的问题
在敲机房收费系统的时候通常都会遇到这个问题:"未能加载文件或程序集"DAL"或它的某一个依赖项.系统找不到指定的文件". 解决方案: 修改将DAL的输出目录 修 ...
- 后缀为php但是bin文件,什么是bin文件,后缀名bin是什么文件
什么是bin文件什么是垃圾箱,Bin文件是二进制文件,它的使用取决于系统或应用程序.后缀为[]的文件.bin]仅表示它是二进制格式.比如,[.bin]经常被用作虚拟光盘文件的后缀,但这并不意味着所有[ ...
- keil MDK中如何生成*.bin格式的文件
在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...
- apollo系列之apollo2 mcu开发(基础篇)之1.3-解析编译生成的IAR中的map文件
查看全部教程开发请点击:apollo系列汇总 查看本文全部文章请点击:apollo系列之apollo2 mcu开发(基础篇)之1.3-解析编译生成的IAR中的map文件 =============== ...
- Vue打包之后会出现.map文件用处
build命令后占体积最大的竟然是.map文件,webpack如何设置不让编译出.map文件呢? 解决办法:去config/index.js中改一个参数: productionSourceMap:fa ...
- STM32 KEIL里的MAP文件分析
一.要让Keil生成map文件,要设置: 再重新编译,没有错误后,就会生成map文件了. 二.map文件中相关概念: 段(section) :描述映像文件的代码和数据块. RO:Read-Only的缩 ...
- ARM 之十 ARMCC(Keil) map 文件(映射文件)详解
在看这篇文章之前 需要对 ARM ELF 文件有一定的了解.了解什么是域(Region).节(Section,也称为节区).段(Segment).镜像(Image).镜像文件(Image File)等 ...
- 使用MAP文件快速定位程序崩溃代码行
作为程序员,平时最担心见到的事情就是程序发生了崩溃,无论是指针越界还是非法操作,都将给我们的应用系统 造成巨大的损失.但在一个大型系统的测试过程中,初期出现程序崩溃似乎成了不可避免的事.其实测试中出现 ...
- 使用MAP文件快速定位程序崩溃代码行(转)
作为程序员,平时最担心见到的事情就是程序发生了崩溃,无论是指针越界还是非法操作,都将给我们的应用系统造成巨大的损失.但在一个大型系统的测试过程中,初期出现程序崩溃似乎成了不可避免的事.其实测试中出现程 ...
- vue打包后出现一些map文件的解决方法
Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1.运行 cnpm run build 开始 ...
最新文章
- 《看透SpringMVC》第十二章 HandlerMapping
- 封装方法公共文件common.js
- GitHub最最最火的开源爬虫工具箱,一爬就取
- 如何解决AIX的文件系统故障
- 若川诚邀你加源码共读群,帮助更多人学会看源码~
- 得到品控手册_得到品控手册 一本令人惊喜的说明书
- ajax post请求怎么传参_如何在$ ajax POST中传递参数?
- C++ 访问成员 “->“还是“.“
- CATIA软件常见问题解答
- 一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱
- 抖音短视频去水印网站 视频消重防删免费
- 摄影曝光口诀_摄影中的“向右曝光”是什么以及为什么要这么做
- afudos备份bios不动_映泰主板刷新AMI BIOS失败自救
- deepin改无盘服务器,UbuntuDeepin系统上搭建nfs服务器
- 开机显示输入最佳预设值_电脑显示输入最佳预设值并重新开机是什么意思
- LabVIEW代码中常见的错误
- 计算机中华五岳说课稿,中国五岳 地理课前三分钟演讲.ppt
- 动态规划解资源分配问题
- Java如何实现实时消息提醒???
- c语言编写excel程序,基于C语言的Excel核价程序的设计与实现