轻松理解bin、hex、axf和elf文件格式
关注+星标公众号,不错过精彩内容
作者 | strongerHuang
微信公众号 | 嵌入式专栏
在嵌入式软件开发中,bin、hex、axf和elf这四种格式的文件很常见。
之前我分享的STVP、ST-LINK Utility、STM32CubeProg这些下载编程工具的时候,都用到了bin、hex格式的文章。
作为普通嵌入式软件开发者,可能只知道如何使用他们,并不会在意这些文件里面具体是什么内容。
嵌入式专栏
0
bin | hex | axf |
程序数据 | 程序数据 | 程序数据 |
地址、类型、校验等标记信息 | 地址、类型、校验等标记信息 | |
调试信息 |
你会发现,同样一段代码,编译生成的bin文件最小,axf最大。
在嵌入式Linux中还有一种文件 ELF(Executable and Linkable Format,可执行与可链接格式)也算是一种程序文件,这种文件包含信息更多、更复杂。
下面分别来描述bin、hex、axf和elf这四种格式文件。
嵌入式专栏
1
而hex则不可修改(文件中包含地址信息):
嵌入式专栏
2
https://en.wikipedia.org/wiki/Intel_HEX
https://www.keil.com/support/docs/1584/
hex行格式:
:BBAAAATT 【D···D】CC
其中:
: 代表行开始,固定为冒号:
BB代表Bytes,数据长度
AAAA代表Address,地址
TT代表Type,数据类型(标识)
D···D代表Date,数据
CC代表CheckSum,校验和
说明:
BB数据长度,也就是D···D这个字段的数据长度;
AAAA地址,起始地址、偏移地址,根据数据类型(TT)有关;
TT数据类型(标识):
00:数据标识
01:文件结束标识
02:扩展段地址
04:线性地址
05:线性开始地址
(地址代表高16位地址,也就是要向左移16bit)
CC校验和计算公式:
CheckSum = 0x100 - (Sum & 0xFF)
不同数据类型个行数据略有差异,先再看下00(数据类型)的格式:
一个常见hex文件:
:020000040800F2
:1000000000040020B1010008FD020008BD02000844
:10001000F902000801020008350400080000000091
:1000200000000000000000000000000021030008A4
···省略数行
:100470000000024084040008000000200004000086
:040480004804000824
:040000050800019955
:00000001FF
1.04类型:线性地址行
:020000040800F2
F2 = 0x100 - (0x02 + 0x04 + 0x08);
比如,修改起始地址为0600:
2.00类型:数据行
:1000000000040020B1010008FD020008BD02000844
:10FFD000D0C5CFA20D0A00003052010810B50A4862
:10FFE00002F0FEFC09A002F0FBFC14A002F0F8FCF9
:10FFF0001EA221A123A002F0F3FC2CA002F0F0FC31
:020000040801F1
:10000000394802F0EDFC10BD3C5301080D0A2A20CE
:1000100020202020202020202020202020202020E0
:100020002020202020202020202020414756D6C7F5
44 = 0x100 - (0x10 + 0x04 + 0x20 + 0xB1 + 0x01 + 0x08 + 0xFD + 0x02 + 0x08 + 0xBD + 0x02 + 0x08 + 0x44) & 0xFF;
3.01类型:文件结束行
:00000001FF
这里代表hex文件结束了,有些公司为了使hex传输(下载)更可靠,或通过工具(或命令在)结束行后面追加校验信息,一般远程升级会考虑更多校验信息(后期抽时间讲述一下远程升级)。
看到这里,我相信很多人都能写一个脚本工具,让hex转为bin文件(后面抽空给大家讲述一下hex和bin转换的工具)。
嵌入式专栏
3
可将源代码包括注释夹在反汇编代码中,这样我们可随时切换到源代码中进行调试。
还可以对程序中的函数调用情况进行跟踪(通过Watch & Call Stack Window查看)。
对变量进行跟踪(利用Watch & Call Stack Window)。
当然,axf文件调试信息的包含的内容有限,并非所有源码(及注释)相关信息都会包含在其中,想要有效调试,还是需要结合源代码工程进行调试。
嵌入式专栏
4
elf文件和bin、hex、axf文件同样属于可执行文件这一类,但是他们之间差异还是很大,elf文件包含的信息更多,也更复杂。
elf格式文件由四部分组成:
ELF header:ELF头
Program header table:程序头表
Section:节
Section header table:节头表
后台回复『文件格式』『嵌入式软件基础知识』阅读更多相关文章。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。