bin、hex、elf、axf文件解析

2023-11-17

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

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

引言

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

文件分类

1、bin文件

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

2、hex文件

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

: A B C D E
1Byte 2Byte 1Byte N Byte 1 Byte

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

关于C数据类型的详解

00 Value
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文件包含的信息更多,也更复杂。

总结

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bin、hex、elf、axf文件解析 的相关文章

  • 学渣的刷题之旅 leetcode刷题 14.最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀 说明 所有输入只包含小写

随机推荐

  • 设计模式(八)----创建型模式之建造者模式与工厂模式区别

    1 工厂方法模式VS建造者模式 工厂方法模式注重的是整体对象的创建方式 而建造者模式注重的是部件构建的过程 意在通过一步一步地精确构造创建出一个复杂的对象 我们举个简单例子来说明两者的差异 如要制造一个超人 如果使用工厂方法模式 直接产生出
  • The package needs to be reinstalled,but I can't find an archive for it

    转自 http cache baiducontent com c m 9d78d513d99456ae28fa950d1a16a620430397634d9583442687c61f84642a1d1031b5fa302261428ed27
  • 云网络丢包故障定位

    引言 本期分享一个比较常见的 络问题 丢包 例如我们去 Ping 个 站 如果能 Ping 通 且 站返回信息全 则说明与 站服务器的通信是畅通的 如果 Ping 不通 或者 站返回的信息不全等 则很可能是数据被丢包了 类似情况想必 家都不
  • 2019年数学建模国赛A题

    前几天中秋节比完了 选的A题 我们学校好多组都选了A题 C题的很少 大家都怕找不到数据 我们组刚开始觉得A B都能做 就是C题可能没有数据无法下手 加上之前做小区道路的时候 用了仿真软件解题 我觉得很不靠谱 我主要是写论文的 然后一起建了数
  • WSUS服务器的详细配置和部署-转载

    WSUS服务器的详细配置和部署 一 WSUS 安装要求1 硬件要求 对于多达 500 个客户端的服务器 建议使用以下硬件 1 GHz 的处理器 1 GB 的 RAM2 软件要求 要使用默认选项安装 WSUS 必须在计算机上安装以下软件 Mi
  • 西瓜+南瓜-task1 模型评估与选择

    题外话 南瓜书是西瓜书公式的进一步深入 机器学习研究什么 对历史经验的归纳总结 预测 比如 早霞不出门晚霞行千里 通过历史累计 经验 预测第二天是晴天还是雨天 此处的 经验 类似于历史数据 通过学习数据 或者训练数据 提前预判 这就是机器学
  • 详细版mongodb下载安装教程----windows版

    一 详细下载过程 1 官网选择需要的版本 Download MongoDB Community Server MongoDB 2 然后得到这个 双击它 3 打开第一个就是这个界面 点next即可 4 第二个界面 点同意 点next 5 点c
  • 世界杯十大巨星

    随着南非世界杯开幕日期一天天临近 近日 英媒 泰晤士报 评选出了世界杯历史上10名最伟大的球星 马拉多纳力压贝利排名榜首 现役球员中 仅罗纳尔多入选并排名第八 一 马拉多纳 在这个地球上 几乎没有球员 可以让其职业生涯 甚至人生 在短短3分
  • 数字万用表的使用

    参考 连3岁小孩子都能看懂的万用表使用方法 地址 https www bilibili com video BV1Gx411z7x2 p 1 vd source cc0e43b449de7e8663ca1f89dd5fea7d 目录 万用表
  • IDEA中使用UT测试过程中的一些小问题

    当查看代码覆盖率结果 快捷键Ctrl Alt F6 当运行测试查看代码覆盖率的时候 出现如下图所示的界面 No coverage results Click Edit to fix configuration settings 解决办法就是
  • 【区块链学习】Merkle Patricia Tree (MPT) 以太坊中的默克尔树

    本篇博文是自己学习mpt的过程 边学边记录 很多原理性内容非自己原创 好的博文将会以链接形式进行共享 一 什么是mpt MPT是以太坊中的merkle改进树 基于基数树 即前缀树改进而来 大大提高了查找效率 二 前缀树 MPT中的P 就是前
  • Linux 中的 cd 命令及示例

    cd命令在Linux 中称为更改目录命令 它用于有效地从当前工作目录移动到系统中的不同目录 Linux 中 cd 命令的语法 光盘 目录 cd directory 在这里 将 directory 替换为您要导航到的目标目录的路径 cd 命令
  • STM32的I/O口的8种工作模式

    转自http www openedv com posts list 21980 htm 浮空 顾名思义就是浮在空中 上面用绳子一拉就上去了 下面用绳子一拉就沉下去了 开漏 就等于输出口接了个NPN三极管 并且只接了e b c极 是开路的 你
  • 机械臂颜色识别案例

    大家好 我就是那个走在路上经常捡到宝的铁熊老师 那么今天捡到了啥好玩的东西呢 一台五自由度机械臂 从天而降出现在我面前 这话说出口 我自己都不信 哪有那么好的运气 其实这是朋友送我玩的 你也想要这台机械臂么 什么 你不要机械臂 你想要那个朋
  • C++ 游戏开发 打地鼠详解 (含.h文件和.cpp文件)

    基于easyx的打地鼠游戏 期末大作业 C语言版本请见 C语言 打地鼠游戏 超级详解 各个函数与算法 设计思路与流程 一 游戏简介 游戏简介 疯狂打地鼠 是一款经典的单机休闲益智类小游戏 调皮的小地鼠们又出来活动了 你需要做的就是将他们砸回
  • 关于Chrome浏览器这点儿事儿(一):基本尝试修改Chrome启动参数实现全屏禁用双指触摸缩放

    最近 刚上任项目boss 接触客户第一个需求便是浏览器需求 需求如下 其中标注红色的需求 是让我花了几十种方式尝试的主要源 自己做过C 知道可以嵌入外壳 有很多种方案 当然了参考了一位仁兄的文章 https www cnblogs com
  • 二进制安装mysql

    下载安装包 下载mysql二进制安装包 yum y install lrzsz numactl wget http mirrors 163 com mysql Downloads MySQL 5 7 mysql test 5 7 38 li
  • error C2676: 二进制“<”:“const _Ty”不定义该运算符或到预定义运算符可接收的类型的转换

    项目场景 C 中写优先级序列 序列内存的是自定义的结构体 在自定义比较方式的时候系统报错 error C2676 二进制 lt const Ty 不定义该运算符或到预定义运算符可接收的类型的转换 with Ty Node 问题描述 prie
  • Javascript使用turndown 将html 转为md

    1 安装turndown npm i turndown 2 使用trundown并保存为md文件 htmlToMarkdown let down new turndown let md down turndown this html let
  • bin、hex、elf、axf文件解析

    冰冻三尺非一日之寒 滴水穿石非一日之功 文章目录 引言 文件分类 1 bin文件 2 hex文件 3 axf文件 4 elf文件 总结 参考资料 深度理解编译过程 参考资料 深度理解编译文件 引言 bin hex elf axf作为嵌入式开