You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从IAR编译生成的.bin文件获取.s汇编文件?

解决IAR生成的.bin文件反汇编及直接生成汇编文件的方法

一、直接从IAR编译时生成汇编文件(推荐)

很多人没找到IAR的汇编输出设置,其实藏在编译选项里:

  • 单个源文件生成汇编:右键目标源文件 → Options → 切换到Output标签页 → 勾选Assembler output,在下拉菜单选择生成.s(纯汇编)或.lst(源码+汇编对照,更便于调试),设置输出路径后重新编译即可。
  • 全局项目生成汇编:点击Project → Options → 切换到Compiler标签页 → Output子选项 → 在Output file下拉菜单选择Assembler listing,指定输出目录,这样所有源文件编译时都会生成对应的汇编文件。

如果需要带符号信息的完整汇编,建议保留IAR生成的.out或.elf目标文件,用IAR自带的ielfdump工具反汇编,命令如下:

ielfdump --disassemble prj.out > prj.s

这个工具能完美识别IAR的目标文件格式,反汇编结果包含函数名、变量名等符号,可读性远高于从.bin反汇编的结果。

二、仅用.bin文件反汇编的方法

.bin是纯二进制机器码,没有文件格式头、符号表和地址信息,所以gdb、objdump默认无法识别,必须手动指定架构和加载起始地址:

使用objdump反汇编(以ARM架构为例)

假设你的项目加载起始地址是0x08000000(比如STM32的Flash起始地址),执行以下命令:

objdump -m arm -b binary --adjust-vma=0x08000000 -d prj.bin > prj.s

参数说明:

  • -m arm:指定目标CPU架构(如果是Thumb指令集,改为-m thumb或-m armv7-m,根据实际芯片架构调整)
  • -b binary:告知objdump当前文件是纯二进制格式
  • --adjust-vma=0x08000000:设置二进制文件的加载起始地址,必须和项目链接脚本中指定的起始地址一致
  • -d:反汇编可执行指令段

使用gdb临时查看汇编

如果只是临时查看部分指令,可通过gdb加载.bin文件并指定架构:

gdb -q
(gdb) set architecture arm  # 匹配你的CPU架构
(gdb) file prj.bin
(gdb) add-symbol-file prj.bin 0x08000000  # 指定加载起始地址
(gdb) disas /r 0x08000000,+0x100  # 反汇编从0x08000000开始的256字节

注意:从.bin反汇编的结果没有任何符号信息,只能看到地址和指令,可读性较差,优先推荐从IAR直接生成汇编或用.out文件反汇编。

内容的提问来源于stack exchange,提问作者Sirghi Vladimir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:30:24