当前位置: 首页 > news >正文

elf、axf、bin的区别与转换

一、核心区别总结

特性ELF (Executable and Linkable Format)AXF (ARM eXecutable Format)BIN (Binary Image)
本质通用标准格式 (Linux/Unix)ARM专用ELF变种纯二进制数据
内容代码+数据+符号表+调试信息+重定位信息ELF+ARM特定调试信息仅机器码和初始化数据
文件大小较大最大(含丰富调试信息)最小
主要用途链接/调试/动态链接ARM平台调试(Keil/IAR)直接烧录/执行
可调试性支持符号级调试支持高级源码调试不可调试
平台依赖跨平台ARM专用与内存布局强相关

二、格式详解

1. ELF 文件
  • 结构

    
    ELF Header
    Program Header Table (加载视图)
    Section Header Table (链接视图)
    .text (代码段)
    .data (初始化数据)
    .rodata (只读数据)
    .bss (未初始化数据,不占文件空间)
    .symtab (符号表)
    .debug (调试信息)
    ...其他段

  • 特点

    • 包含完整的链接和调试信息

    • 支持动态链接库

    • GCC工具链默认输出格式

2. AXF 文件
  • 本质:ARM工具链(Keil MDK/IAR)对ELF的扩展

  • 特有内容

    • ARM CoreSight™ 调试信息

    • Flash下载算法描述

    • 设备内存映射配置

  • 典型应用

    • Keil uVision调试

    • J-Link/ULinkPro等ARM调试器

3. BIN 文件
  • 结构:纯二进制序列

    
    [0x0000] 机器指令1
    [0x0004] 机器指令2
    ...
    [0x1000] 初始化数据
    

  • 特点

    • 无地址信息(需指定加载基址)

    • 无符号/调试信息

    • 直接对应内存映像


三、转换方法与工具

1. ELF → BIN(常用)

# GCC工具链
arm-none-eabi-objcopy -O binary input.elf output.bin# ARMCC工具链(Keil)
fromelf --bin --output=output.bin input.axf
2. AXF → BIN

# Keil环境
fromelf --bin -o output.bin input.axf# 或先转ELF再转BIN
fromelf --elf -o temp.elf input.axf
arm-none-eabi-objcopy -O binary temp.elf output.bin
3. BIN → ELF(逆向转换)

# 需指定基址和架构
arm-none-eabi-objcopy -I binary -O elf32-littlearm \-B armv7e-m --set-section-flags .data=alloc,load,code \--rename-section .data=.text \input.bin output.elf
4. ELF ↔ AXF

# AXF本质是ELF的扩展,可直接重命名(不推荐)
cp input.axf output.elf# 完整转换需重新链接(Keil工程设置Output Format)

四、转换关系图


五、关键注意事项

  1. 地址一致性

    • BIN文件无地址信息,加载时必须指定基址(需与链接脚本一致)

    
    /* 链接脚本必须指定基址 */
    MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = 128K }

  2. 调试信息保留

    
    # 保留调试信息的ELF(不推荐用于生产)
    arm-none-eabi-objcopy --only-keep-debug input.elf debug.sym

  3. BIN文件填充

    • 使用填充确保段对齐(如Flash擦除块大小)

    
    arm-none-eabi-objcopy -O binary --pad-to 0x10000 input.elf padded.bin

  4. 校验和添加

    
    # 在BIN文件末尾添加CRC32校验
    srec_cat output.bin -binary -crop 0 0xFFFF -fill 0xFF 0x0000 0x10000 \
    -crc32-l-e 0x10000 -o final.bin


六、典型应用场景

文件格式使用场景工具链支持
ELFLinux应用、U-Boot、高级调试GCC, Clang
AXFKeil/IAR工程调试、JTAG下载ARMCC, IAR
BINBootloader加载、Flash烧录、量产所有工具链

经验提示:开发阶段使用ELF/AXF调试,发布时转换为BIN进行烧录。使用arm-none-eabi-readelf -a file.elf可分析ELF结构。

http://www.dtcms.com/a/283264.html

相关文章:

  • freetds 解决连接SQL SERVER报错Unexpected EOF from the server
  • 基于组学数据的药物敏感性预测模型构建与验证
  • AI时代基础入门
  • 卷积神经网络(CNN)最本质的技术
  • 离线环境中将现有的 WSL 1 升级到 WSL 2
  • list类的常用接口实现及迭代器
  • [BJDCTF2020]Cookie is so stable
  • Mybatis07-缓存
  • 正确选择光伏方案设计软件:人力成本优化的关键一步
  • 聊聊自己的新书吧
  • lustre设置用户配额
  • 同态加密赋能大模型医疗文本分析:可验证延迟压缩的融合之道
  • xss-labs靶场前八关
  • C语言基础:循环练习题
  • Linux切换到Jenkins用户解决Jenkins Host key verification failed
  • Electron实现“仅首次运行时创建SQLite数据库”
  • 大语言模型幻觉检测:语义熵揭秘
  • [Mysql] Connector / C++ 使用
  • AutoMQ 正式通过 SOC 2 Type II 认证
  • 尚庭公寓-----day1 业务功能实现
  • 八、DMSP/OLS、NPP/VIIRS等夜间灯光数据能源碳排放空间化——碳排放空间分级、空间自相关
  • PyCharm高效入门指南
  • docker+小皮面板
  • TCP 三次握手与四次挥手笔记
  • 光伏气象数据驱动设计方案优化
  • Spider的用法
  • 搭建云途YTM32B1MD1芯片VSCODE+GCC + Nijia + Cmake+Jlink开发环境
  • Python设计模式深度解析:单例模式(Singleton Pattern)完全指南
  • 深度解析api-ms-win-crt-runtime-l1-1-0.dll:它是什么?为什么重要?如何修复?
  • Spring MVC中@PathVariable的用法详解