一、HEX

Hex文件,一般是指Intel标准的十六进制文件。Intelhex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般编程器均支持生成此种格式文件。如,KEIL下可通过配置相关选项来生成HEX目标文件。

HEX文件由记录(RECORD)组成。在HEX文件里面,每一行代表一个记录。

形如 
:BBAAAATTHHHH...HHHHCC

BB:字节个数。

AAAA:数据记录的开始地址,高位在前,低位在后。

TT: Type

00数据记录,用来记录数据。

01记录结束,放在文件末尾,用来标识文件结束。

02用来标识扩展段地址的记录

04扩展地址记录(表示32位地址的前缀)

HHHH:一个字(Word)的数据记录,高字节在前,低字节在后。TT之后共有 BB/2 个字的数据 。
CC: 占据一个Byte的CheckSum

举例分析:

:020000040000FA
:10000400FF00A0E314209FE5001092E5011092E5A3
:00000001FF

第1条记录长度为0x02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为FA。从这个记录的长度和数据,我们可以计算出基地址为0X0000。后面的数据记录都以此地址为基地址。
第2条记录长度为0x10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。数据为FF00A0E314209FE5001092E5011092E5,共16个字节,记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004. 其实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5。

第3条记录的长度为00,LOAD OFFSET为0000,TYPE= 01,校验和为FF。类型为01,说明这个是一个END OF FILE RECORD,标识文件的结尾。HEX结束符一般以:00000001FF结尾。

二、BIN

Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。

简单总结一下这2种文件格式的区别:

1、HEX文件包含地址信息而BIN文件只包含数据本身,烧写或下载HEX文件时,一般不需要用户指定地址,因为HEX文件内部已经包含了地址信息。烧写BIN文件时则需要用户指定烧录的地址信息。
2、HEX文件是用ASCII码来表示二进制的数值。例如8-BIT的二进制数值0x4E,用ASCII来表示就需要分别表示字符‘4’和字符‘E’,每个字符均需要一个字节,因此HEX文件至少需要2倍BIN文件的空间。

三、Axf

Axf文件由ARM编译器产生,除了包含bin的内容之外,还附加其他调试信息,这些调试信息加在可执行的二进制数据之前。调试时这些调试信息不会下载到RAM中,真正下载到RAM中的信息仅仅是可执行代码。因此,如果ram的大小小于axf文件的大小,程序是完全有可能在ram中调试的,只要axf除去调试信息后文件大小小于ram的大小即可。

调试信息有以下功用:

1、 可将源代码包括注释夹在反汇编代码中,这样我们可随时切换到源代码中进行调试。

2、 我们还可以对程序中的函数调用情况进行跟踪(通过Watch & Call Stack Window查看)。

3、对变量进行跟踪(利用Watch & Call Stack Window)。

调试信息虽然有用,但程序功能实现后,在目标文件和库中减少调试信息却是非常有益的。减少调试信息可减少目标文件和库大小、加快链接速度、减小最终镜象代码。以下几种方法可用来减少每个源文件产生的调试信息:

1、避免在头文件中条件性使用#define,链接器不能移除共用的调试部分,除非这些部分是完全一样的。

2、更改C/C++源文件,使#included包含的所有头文件有相同顺序。

3、尽量使用数量较多的小头文件而不是较大的单一头文件,这有利于链接器获取更多的通用块。

4、程序中最好只包含必须用到的头文件。避免重复包含头文件,可使用编译器选项--remarks来产生警告信息;

5、使用编译命令行选项--no_debug_macros,从调试表中丢弃预处理宏定义。

四、ELF

ELF(Executableand linking format)文件是x86 Linux系统下的一种常用目标文件(objectfile)格式,有三种主要类型:
(1)适于连接的可重定位文件(relocatablefile),可与其它目标文件一起创建可执行文件和共享目标文件。

(2)适于执行的可执行文件(executable file),用于提供程序的进程映像,加载到内存执行。

(3)共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。

ELF文件格式比较复杂。

小结:可由elf文件转化为hex和bin两种文件,hex也可以直接转换为bin文件,但是bin要转化为hex文件必须要给定一个基地址。而hex和bin不能转化为elf文件,因为elf的信息量要大。Axf文件可以转化为bin文件,KEIL下可用以下命令fromelf -nodebug xx.axf -bin xx.bin即可。

Hex、bin、axf、elf格式文件小结相关推荐

  1. 【开发工具】【readelf】查看ELF格式文件工具(readelf)的使用

    目录 readelf概述 readelf命令使用说明 readelf概述 readelf是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用.常见的文件如在Linux上的可执行 ...

  2. 一步步编写操作系统 47 elf格式文件分析实验

    在上一节中,我们讲述了elf格式的部分理论知识,为什么是部分呢?因为我们本着"够用"的原则,只把我们需要了解的部分说完啦.不过,我相信大部分同学仅仅凭上一节中的理论知识还是领悟不到 ...

  3. linux elf格式文件详细分析

    ELF(Executable and Linkable Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. ...

  4. linux中elf文件的作用,Linux中ELF格式文件介绍

    一. ELF简介 ELF(Executable and Linkable Format)即可执行连接文件格式,是一种比较复杂的文件格式,但其应用广泛.与linux下的其他可执行文件(a.out,cof ...

  5. ELF格式文件详细分析

    ELF(Executable and Linkable Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. ...

  6. 各种烧写文件格式简介-ELF Hex Bin axf

    转载地址:http://blog.chinaunix.net/uid-20321537-id-1966794.html 一,ELF Executable and linking format(ELF) ...

  7. 关于ELF格式文件里面的调试信息解读

    调试信息格式一般有几种:debug信息格式有stabs,coff,xcoff,dwarf.各自在业界不同的调试器下面用,gdb只是调试器中的一个罢了. 常用的有两种格式,stab和dwarf,stab ...

  8. ELF格式文件(非常详细)

    ELF文件研究 在计算机中,ELF文件是一种主要用于二进制,可执行文件,目标代码格式的文件, ELF文件主要由四个部分组成 1.ELF头(ELF header),2.程序头表(Program head ...

  9. ELF格式文件特点的简单说明

    ELF:可执行连接文件格式. ELF文件优点: 1. 支持不同平台上的交叉编译和交叉链接,可移植性性强(与Linux下其他可执行文件(a.out,cof)相比) 2. 在执行时支持动态链接共享库 EL ...

最新文章

  1. CSDN湘苗培优|高起点步入职场,快人一步!
  2. wpf--------------datagrid全选反选 多选进行删除操作 前后台
  3. 如何解决Git中的合并冲突
  4. ubuntu18 install YARN
  5. 在哪里可以找到用于读取 YML 配置文件的 Spring 文档
  6. P2444-[POI2000]病毒【AC自动机】
  7. java使窗体最大化_[转]java窗体运行时最大化及关闭方法示例
  8. Mac电脑上设置应用程序开机启动详细教程!速来get一下
  9. 监控服务器ssh登录,并发送报警邮件
  10. 微信小程序:计算器(附源码)
  11. APS高级计划排程系统和生产排产系统
  12. 香港电讯将构建光纤超高速公路
  13. 嵌入式开发板硬件操作入门学习6——硬件知识_串口(UART)硬件介绍
  14. 计算机学院写论文格式,写作计算机论文的标准格式是什么
  15. “昆明城市咖啡地图”活动再度开启
  16. WinWebMail破解步骤
  17. opc-ua协议机器数据采集-python
  18. 腾讯欲全资收购搜狗,目的是什么?
  19. 字典树简单实现 插入 查找 遍历
  20. 【跟学C++】C++队列——queue类(Study13)

热门文章

  1. 证明:gcd(m,n)=gcd(n mod m,m)成立,m,n为正整数,m>0. 【Euclid算法证明】
  2. CodeGear Delphi2009 个人体验一
  3. Mac 编译运行ET6.0Demo
  4. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法、数据类型(整型、布尔型、浮点型、字符串型)
  5. 安卓系统无法自动对时的问题
  6. 魔力宝贝道具服务器无响应,魔力宝贝:关于道具服务器第一天的感想
  7. 计算机有效策略无法连接打印,共享打印提示:Windows无法连接到打印机,拒绝访问...
  8. Django3.0+Python3.8+MySQL8.0 个人博客搭建三|创建博客项目
  9. C#生成电子印章源码
  10. android editable接口,Spannable与Editable区别