news 2026/7/9 3:45:26

Keil MDK 生成 .bin 固件与 .dis 反汇编文件的方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Keil MDK 生成 .bin 固件与 .dis 反汇编文件的方法

前言

在嵌入式开发中,除了生成 .hex 文件,有时还需要二进制固件(.bin)或反汇编文件(.dis)用于量产烧录、IAP 升级或底层调试。本文介绍如何在 Keil MDK 中通过 fromelf 工具自动生成这两种文件。


目录

前言

一、工具简介

二、配置步骤

三、验证输出

四、应用场景

五、常见问题

六、小结


一、工具简介

ARM 编译器套件自带了fromelf工具,可对生成的 .axf 镜像进行格式转换与内容提取:

  • .bin:纯二进制代码,无地址信息,适合直接烧写到 Flash 起始地址。
  • .dis:反汇编文本,包含地址、机器码和汇编指令,用于分析代码布局或排查疑难 Bug。

通过 Keil 的 "Run User Programs After Build/Rebuild" 功能,可在编译成功后自动执行命令,省去手动转换的麻烦。


二、配置步骤

(1)打开工程,进入ProjectOptions for Target…
(2)切换到User选项卡。
(3)在After Build/Rebuild区域,勾选Run #1Run #2(或只勾选需要的)。
(4)在输入框中填入对应命令:

Run #1:生成 .bin 文件

fromelf --bin -o "$L@L.bin" "$L@L.axf"

Run #2:生成 .dis 文件(反汇编)

fromelf --text -a -c --output="$L@L.dis" "$L@L.axf"

参数说明:

  • $L@L:Keil 的内置变量,代表当前目标工程的文件名(不含扩展名),如my_project。我这里是test。
  • --bin:输出纯二进制文件。
  • --text -a -c:输出文本格式的反汇编,-a表示输出地址,-c表示混合源代码与汇编(需要编译时开启了调试信息,否则仅显示汇编)。
  • --output:指定输出文件名。

(5)点击OK保存设置。之后每次编译(Build)成功,就会在工程目录(或 .axf 所在目录)下自动生成对应的 .bin 和 .dis 文件。

提示:如果想让 .bin 和 .dis 文件生成在指定文件夹,可将$L@L.bin替换为相对路径,如.\Output\$L@L.bin,并确保文件夹存在。


三、验证输出

编译完成后,查看工程目录,应能看到类似以下的文件:
-my_project.bin— 可直接烧录的二进制固件。
-my_project.dis— 反汇编文本,可用记事本打开查阅。

在我这里是\test\MDK-ARM\test,里面有test.bin,test.dis。


四、应用场景

-.bin 固件
适用于:

  • 串口 IAP / USB 升级时,直接传输完整二进制代码;
  • 生产工具或烧录器只识别 .bin 格式;
  • 需精确控制固件大小(.hex 含地址信息,体积更大)。

-.dis 反汇编
常用于:

  • 分析代码在 Flash 中的实际布局;
  • 排查 HardFault 等异常时的 PC 指针位置;
  • 确认关键函数或中断向量表的链接顺序;
  • 学习 ARM 汇编与编译器优化行为。

五、常见问题

Q: 编译报错 "fromelf 不是内部或外部命令"?
A: Keil 安装目录已包含 fromelf.exe,正常情况下会自动定位。如果失败,可检查项目路径是否包含中文或特殊字符,或将 fromelf 的完整路径(如C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe)替换命令中的fromelf

Q: 生成的 .dis 文件只有汇编,没有源码?
A: 需要在编译时包含调试信息。进入Options for TargetOutput选项卡,勾选Debug Information。此外,--text -a -c中的-c选项才启用源码混合,如果不需要源码,去掉-c即可。


六、小结

通过 Keil 的 "After Build" 自定义命令,可以轻松实现编译后自动输出 .bin 和 .dis 文件。这对嵌入式开发和调试非常实用,省去了重复的手动操作。无论是用于 IAP 在线升级,还是深入分析代码运行问题,这两个文件都能提供有力的帮助。

希望这篇短文能帮你完善编译流程。如果有其他好用的 Keil 技巧,欢迎交流分享!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 3:44:02

PHP RCE 漏洞防御:基于CTFHub 6道题目的3层安全编码实践

PHP RCE 漏洞防御:基于CTFHub 6道题目的3层安全编码实践在当今的Web应用安全领域,远程代码执行(RCE)漏洞无疑是最危险的安全威胁之一。这类漏洞一旦被利用,攻击者可以直接在服务器上执行任意命令,导致数据泄露、服务器被控制等严重…

作者头像 李华
网站建设 2026/7/9 3:43:59

新疆螺纹钢厂家怎么挑才靠谱

在新疆的建筑工地上,螺纹钢作为钢筋混凝土结构的“骨架”,其质量直接决定了建筑的安全性和耐久性。无论是高层住宅、工业厂房,还是基础设施项目,选对螺纹钢厂家,无异于为工程系上了“安全带”。本文将从行业从业者的视…

作者头像 李华
网站建设 2026/7/9 3:42:17

前端工程师转型大模型应用层:从 UI 开发到 AI 交互设计

我叫小李,一个干了 5 年前端的工程师。 从 jQuery 到 Vue,从 Bootstrap 到 Tailwind,我自诩是"用户体验的守门人"。但 2023 年 GPT-4 出来后,我隐隐觉得不对劲——用户以后还会用我们精心设计的表单和按钮吗&#xff1f…

作者头像 李华
网站建设 2026/7/9 3:39:21

3分钟解锁中文Figma:设计师的母语设计新体验

3分钟解锁中文Figma:设计师的母语设计新体验 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?作为中文设计师,你是否经…

作者头像 李华
网站建设 2026/7/9 3:38:34

拍照报销,自动填单——报销自动化全流程拆解

出差的同事在高铁上掏出手机,拍下刚拿到的餐饮发票,App自动识别出发票金额、日期、商家名称,自动填入报销单。他只需要选择报销事由和费用科目,点一下提交,报销流程就启动了。回到公司时,报销单已经走到了主…

作者头像 李华
网站建设 2026/7/9 3:37:02

NSK微型精密滚珠丝杠技术详解

型号 PSS0608NAD0150 属于 NSK 的紧凑型 FA 系列(PSS 型)精密级标准滚珠丝杠(轴端加工完成品)。该型号是该系列中的微型规格,其丝杠轴外径仅为 6 mm,但搭配了相对较大的 8 mm 导程,全长为 150 m…

作者头像 李华