前言:
PC平台流行的可执行文件格式(Executable File Format),主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable and Linking Format,可执行和链接格式)。他们都是COFF(Common Object File Format)的变种。ARM架构采用的也是ELF文件格式。
COFF是在Unix System V Release 3时由 UNIX 系统实验室(UNIX System Laboratories, USL)首先提出并且使用的文件规范,后来微软公司基于COFF格式,制定了PE格式标准,并将其用于当时的Windows NT系统。在System V Release 4时,UNIX系统实验室(USL)在COFF的基础上,开发和发布了ELF格式,作为应用程序二进制接口 (Application Binary Interface(ABI)。
此后,工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。
由于ELF文件具有通用性强的优点,现在流行的开发模式是:先通过编译工具生成ELF文件格式的可执行文件,在使用外部工具,抽离出ELF文件中的相应部分,生成BIN文件。著名的GNU、bootloader、U-Boot就采用了这种做法。例如,编译器工具集GCC的BIN生成工具是elf2bin。ARM公司虽然使用的是自家的armcc编译器,但是也提供了fromelf工具来实现上面的方式。
------------------------

Gcc 编译出来的是ELF文件。通常gcc –o test test.c,生成的test文件就是ELF格式的,在linux shell下输入 ./test就可以执行。

-------------------------
Bin 文件是经过压缩的可执行文件,去掉ELF格式的东西。是直接的内存映像的表示。在系统没有加载操作系统的时候可以执行。
  • elf(executable  and   link   format)文件里面包含了符号表,汇编等。
  • BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。
在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败。
两种文件都可以运行:
机器最终只认BIN,之所以有ELF格式是在有操作系统时,操作系统会根据ELF解析出代码、数据等等,最终仍是以BIN运行。由于elf文件的信息比较全,所以可以用来以单步跟踪的方式运行。关键是看操作系统的 loader 功能的实现策略。
-------------------------
Hex文件,一般是指Intel标准的十六进制文件。Intelhex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般编程器均支持生成此种格式文件。
--------------------------

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,从调试表中丢弃预处理宏定义。

......................................................................................................................................

小结:
.axf文件=调试信息+.bin文件
  • ELF(Executableand linking format)文件是x86 Linux系统下的一种常用目标文件(objectfile)格式,有三种主要类型:
(1)适于连接的可重定位文件(relocatablefile),可与其它目标文件一起创建可执行文件和共享目标文件。
(2)适于执行的可执行文件(executable file),用于提供程序的进程映像,加载到内存执行。
(3)共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。 
  • 可由elf文件转化为hex和bin两种文件,hex也可以直接转换为bin文件
但是bin要转化为hex文件必须要给定一个基地址。而hex和bin不能转化为elf文件,因为elf的信息量要大。Axf文件可以转化为bin文件,KEIL下可用以下命令fromelf -nodebug xx.axf -bin xx.bin即可。
  • axf和elf都是编译器生成的可执行文件。 
区别是:ADS编译出来的是AXF文件( ARM的ELF)。 
gcc编译出来的是ELF文件。两者虽然很像,但还是有差别的。 
这是文件格式的差别,不涉及调试格式。 
  • axf/elf是带格式的映象,bin是直接的内存映象的表示。
  • Linux OS下,ELF通常就是可执行文件,通常gcc -o testtest.c,生成的test文件就是ELF格式,的在Linux Shell下输入./test就可以执行。
在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行。
故:HEX和bin文件可以在裸机上运行,而ELF文件在有OS的环境中运行的。

ARM:ELF bin Hex axf相关推荐

  1. Hex、bin、axf、elf格式文件小结

    一.HEX Hex文件,一般是指Intel标准的十六进制文件.Intelhex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理程序存储区中的目标代码映象.一般编程器均支持生成此种格式文件. ...

  2. 痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件(.bin/.hex/.s19)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是痞子衡<ARM Cortex-M文件那些事>主 ...

  3. 烧写文件格式介绍(ELF、HEX、BIN)

    烧写文件格式说明(ELF.HEX.BIN) 一.ELF: Executable and linking format(ELF)文件是x86Linux系统下的一种常用目标文件(object file)格 ...

  4. 记:ELF文件解析初定义——文件头解析

    0x00 概论 因为TI的DSP输出文件与传统的ELF文件不符,所以本人就顺道研究了一下现在的ELF的文件格式. 会将其陆续完成在文章中. 阅读本文之前,您需要掌握的技能有: 技能名称 技能熟练度 技 ...

  5. bin hex 文件互相转换

    bin hex 文件互相转换 参照KEIL官网的教程和工具. 这里说已经使用srec_cat.exe(下载链接)替代bin2hex了.使用方法. bin文件转hex文件 .\srec_cat.exe ...

  6. 在CCS上生成.bin .hex .txt文件并烧录到MSP430 使LCD灯亮

    在CCS上生成.bin .hex .txt文件并烧录到MSP430 使LCD灯亮  摘自    https://www.cnblogs.com/binglmm/p/9629618.html      ...

  7. 记:ELF文件解析初定义——Section段相关讲解

    0x00 概论 因为TI的DSP输出文件与传统的ELF文件不符,所以本人就顺道研究了一下现在的ELF的文件格式. 会将其陆续完成在文章中. 承接上文,上文书说到,解析文件头格式,数据段的分配定义,与数 ...

  8. sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位

    今天手抖本来要修改/usr/bin/下面的一个文件属性为   user:user,执行chown -R /usr/bin/的时候,再按tab之前直接敲了回车:结果导致执行sudo命令时出现错误提示:& ...

  9. cfile清空文件内容_编译-链接-加载 :ELF文件格式解析

    摘要:对于C++的初学者,经常在程序的编译或者加载过程中遇到很多错误,类似undefined reference to ... 和 GLIBCXX_3.4.20 not found 等.这些错误都涉及 ...

最新文章

  1. 正式压力测试:locust进阶,超简单搭建生产级locust集群
  2. basePath = request.getScheme()+://+request.getServerName()+:+r
  3. python字典按value逆序排序_python 对字典按照value进行排序的方法
  4. 用区块链变革教育行业?全球首个教育+旅行+区块链平台——Ambertime:让每个人都能够将时间凝结成自己专属的“琥珀”...
  5. centos7 docker-compose安装_Docker Compose 搭建 Redis Cluster 集群环境
  6. 【Flutter】底部导航栏页面框架 ( BottomNavigationBar 底部导航栏 | PageView 滑动页面 | 底部导航与滑动页面关联操作 )
  7. python中可选参数_带可选参数的Python函数
  8. flask开启调试的四种模式
  9. 超详攻略!Databricks 数据洞察 - 企业级全托管 Spark 大数据分析平台及案例分析
  10. 计科14-1 140201125 王振禹 作业三
  11. 素拓活动策划书的撰写范文
  12. [译]C语言实现一个简易的Hash table(5)
  13. 使用curl与wget发送get与post请求
  14. flightgear_使用FlightGear进入虚拟天空
  15. APISpace 空号检测API接口 免费好用
  16. html表单实例:用户反馈表单页面代码
  17. threejs包围盒的应用
  18. 在线计算机微积分,高等数学计算器
  19. 链家租房数据基本分析
  20. 1000年---2000年之间的闰年、判断某年是否为闰年

热门文章

  1. golang生成随机ID的方法之ObjectID
  2. 机箱硬盘指示灯不亮_光纤收发器的六个指示灯及对应故障对策
  3. 15个PLC必备的基础知识,赶紧收好
  4. 不小心把桌面进程结束了怎么办_电脑桌面进程崩溃怎么办_桌面进程explorer怎么重启...
  5. permission uses-permission区别
  6. Solidworks如何使用Toolbox
  7. 《量化金融R语言高级教程》一2.1 套利定价理论
  8. java实现五子棋游戏
  9. 3.2 Trino二次开发-动态数据源管理-源码解读2
  10. python自动备份交换机配置脚本_python代码自动备份交换机配置