bin、hex、elf、axf文件解析

冰冻三尺非一日之寒,滴水穿石非一日之功

参考资料:深度理解编译过程
参考资料:深度理解编译文件

引言

bin、hex、elf、axf作为嵌入式开发中比较常见的文件格式,一直在使用,从未深入理解过相关区别和联系。借本篇章做个简短总结,描述相关差异。如有错漏之处,敬请指正。

文件分类

1、bin文件

bin文件是单纯的数据文件,直接存储于flash当中。由于不包含地址信息,使用下载器时往往需要设置起始地址。也正是由于其不包含其他信息,故编译生成的文件中,bin文件所占内存最小。其查看方式也需要特定的二进制查看器。如图所示,使用J-flash打开一个二进制文件。
在这里插入图片描述

2、hex文件

本文所述hex文件为Intel Hex,是由Intel Hex,本质是ASCII文本行组成,由换行符或回车符或两者分隔。文件以行为单位记录数据,每行都由任意数量的十六进制数组成。它们按以下格式排列

:ABCDE
1Byte2Byte1ByteN Byte1 Byte

: 数据开头,固定格式
A:本行数据的长度
B:数据起始地址
C:数据类型
D:数据字节(其长度大小与A相同)
E:校验和(0x100 - 累加和)

关于C数据类型的详解

00Value
01数据记录
02文件结束记录
03扩展段地址记录
04扩展段地址记录
05扩展线性地址记录
06开始线性地址记录

如下是截取的部分hex文件

:020000040800F2
:200000006837002069010008750700086D07000871070008F9010008D11000080000000044
:20002000000000000000000000000000F90B000861020008000000007F010008350D000877
......
:00000001FF

代入分析 :020000040800F2

02:数据长度两个字节
0000:起始地址为0x0000
04:数据类型,扩展地址为0x0800 指示以下每行的高位地址为0x0800
0800:数据
F2:校验和 (0x100-0x0E (2+4+8) )
该行指示 以0X0800作为段扩展地址高位,以下每行高位地址为0X0800
则第二行的记录的起始地址为0X08000000
第三行的记录地址为0X08000020

3、axf文件

axf文件如何打开
axf文件是基于ARM编译器产生的包含调试信息的编译文件。使用MDK开发环境时,进入调试模式下,需要依赖于axf文件。MDK5在调试下,会通过J-LINK将axf文件下载如单片机中,用于设备调试。
axf文件的调试信息作用:

可将源代码包括注释夹在反汇编代码中,这样我们可随时切换到源代码中进行调试。
还可以对程序中的函数调用情况进行跟踪(通过Watch & Call Stack Window查看)。
对变量进行跟踪(利用Watch & Call Stack Window)。

4、elf文件

elf文件(elf文件详解)是LInux系统下产生的包含调试信息的文件,使用Readif指令可以获取、查看elf文件内容。相较于其他三种文件,elf文件包含的信息更多,也更复杂。

总结

受限于个人技术水平,相关分类可能介绍的不是很清楚。文中也贴有大佬们所写分析文章链接,感兴趣的同学可点击跳转深入理解一下。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值