ELF文件格式以及重要文件(.o,.elf,.axf,.bin,.hex)说明

这篇具有很好参考价值的文章主要介绍了ELF文件格式以及重要文件(.o,.elf,.axf,.bin,.hex)说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可执行与可链接格式 (Executable and Linkable Format,ELF),常被称为 ELF格式,是一种用于可执行文件、目标代码、共享库和核心转储(core dump)的标准文件格式,一般用于类Unix系统,比如Linux,Macox等。ELF 格式灵活性高、可扩展,并且跨平台。

主要可以分为三种类型:

(1)可重定位的文件(Relocatable File):它包含基础代码和数据,但代码及数据都没有指定绝对地址,适合于与其他目标文件链接来创建可执行文件或者共享目标文件。一般由编译器根据源代码生成,如MDK的armcc和armasm生成的*.o文件,Linux的*.o 文件,Windows的 *.obj文件。

(2)可执行文件(Executable File):它内部组织的代码数据都有固定的地址(或相对基地址的偏移),系统可根据这些地址信息把程序加载到内存执行。一般由连接器根据可重定位文件链接而成,如MDK中gcc编译链接生成的*.elf文件,armlink生成的*.axf文件(*.axf在*.elf基础上增加了调试使用的信息),Linux的/bin/bash文件,Windows的*.exe文件。

(3)共享目标文件(Shared Object File):MDK生成的*.lib文件,Linux的*.so文件,Windows的DLL文件。

ELF文件格式

ELF文件包含ELF文件头(ELF header)、程序头(Program header)、节区(Section)以及节区头部表(Section header table)。

ELF文件头:用来描述整个文件的组织,例如数据的大小端格式,程序头、节区头在文件中的位置等。

程序头:告诉系统如何加载程序,例如程序主体存储在本文件的哪个位置,程序的大小,程序要加载到内存什么地址等等。

节区:*.o文件的独立数据区域,它包含提供给链接视图使用的大量信息,如指令(Code)、数据(RO、RW、ZI-data)、 符号表(函数、变量名等)、重定位信息等。

节区头部表:包含了本文件节区的信息,如节区名称、大小等等。

ELF文件格式以及重要文件(.o,.elf,.axf,.bin,.hex)说明

编译常见重要文件

*.o、.elf、.axf、.bin及.hex文件都存储了编译器根据源代码生成的机器码,根据应用场合的不同,它们又有所区别。

.o文件、.elf文件和.axf文件

* .o文件是可重定位的对象文件(目标文件),*.axf文件是由ARMCC编译生成的可执行对象文件,可用于调试,不可重定位,*.elf文件是由GCC编译生成的文件,功能与axf文件一样。

  • *.o文件由相应的源文件编译而成,是独立的文件,而*.axf由多个.o文件链接而成,是整个工程汇总的文件,包含了所有调用到*.o文件节区的内容。

  • *.o文件中不含有程序头,且没有分配节区地址,而*.axf中除了具有*.o文件中节区头描述的节区类型、 文件位置偏移、大小之外,还包括具体的地址描述。

ELF文件格式以及重要文件(.o,.elf,.axf,.bin,.hex)说明

.hex文件和.bin文件

在MDK中使用下载器(DAP/JLINK/ULINK等)下载程序或仿真的时候,MDK调用*.axf文件然后控制下载器把代码内容下载到STM32芯片对应的存储空间,复位芯片开始执行代码。然而脱离了MDK或IAR等工具,下载器就无法直接使用*.axf文件下载代码,因此需要hex和bin格式的代码数据文件。

bin文件是纯二进制数据,无特殊格式。它是最直接的代码映像,记录的内容就是要存储到FLASH的二进制数据,没有任何辅助信息。

hex文件是Intel公司制定的一种使用ASCII文本记录机器码或常量数据的文件格式, 这种文件常常用十六进制符号来记录将要存储到ROM中的数据,绝大多数下载器支持该格式。它的基本格式组成如下:

组成

解释

表示记录的开头

II

1个字节,表示主体数据区长度

aaaa

2个字节,表示该记录内容在FLASH中存放的起始地址

tt

1个字节,表示该记录类型(00:数据记录;01:本文件结束记录;02:扩地址记录;04:扩展线性地址记录,后面的记录按该地址递增;05:表示一个线性地址记录的起始,只适用于ARM)

dd...

表示以字节为单位的多个数据

cc

表示本条记录的校验和,它是前面所有16进制数据 (以字节为单位)的和对256取模运算的结果的补码文章来源地址https://www.toymoban.com/news/detail-414268.html

到了这里,关于ELF文件格式以及重要文件(.o,.elf,.axf,.bin,.hex)说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ELF文件格式、编译过程和符号表

    ELF的英文全称是The Executable and Linking Format,最初是由UNIX系统实验室开发、发布的ABI(Application Binary Interface)接口的一部分,也是Linux的主要可执行文件格式。 比如说用户空间的.out就是一个ELF的文件 一个程序的3个基本段:text段,data段,bss段。 text段:就是 放程序代码 的,编译时确

    2024年02月05日
    浏览(82)
  • 【嵌入式】ELF格式文件分析工具汇总

    🧑 作者简介 :阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍 :分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等

    2024年03月10日
    浏览(183)
  • .out .elf .bin

    .out 和 .elf 是两种计算机可执行文件格式,都是用来保存编译过后的程序代码的。 .out 格式是早期 Unix 系统使用的可执行文件格式,是一种简单的格式。不支持许多现代系统的特性,如动态链接库和符号表等。 .elf 格式是扩展的可执行文件格式,它支持多种平台,并且比 .ou

    2024年02月08日
    浏览(41)
  • C编译过程 以及 ELF文件(学习笔记)

    一个用C语言编写的高级语言程序是从编写到打包、再到编译执行的基本过程,我们知道在CPU上执行的是低级别的机器语言,从高级语言到低级别的机器语言肯定是要经过翻译过程,这个过程大体的过程如下图所示: 在Unix系统中,从源文件到可执行目标文件是由编译驱动程序完

    2024年02月12日
    浏览(42)
  • 编译工具链 之二 详解 ELF 格式及标准、UNIX 发展、ABI

      在计算机及嵌入式系统中,二进制文件也有一定的标准格式,通常会包含在各平台的应用程序二进制接口 (Application Binary Interface,ABI)规范中。它是编译工具链必须要遵守的规范(编译工具链产生符合 ABI 的二进制文件)。   在计算机系统中,应用程序二进制接口 (

    2024年02月07日
    浏览(65)
  • ELF 文件

    本部分内容来源于 ELF 1.2 标准,内容经过一定的修改与整理,主要参考文献如下 ELF 文件格式分析,北京大学,滕启明 ELF-摧毁圣诞 ELF (Executable and Linkable Format)文件,也就是在 Linux 中的目标文件,主要有以下三种类型 可重定位文件(Relocatable File),包含由编译器生成的代

    2024年01月20日
    浏览(35)
  • IDA动态调试ELF文件

    IDA附带一些组件

    2024年02月14日
    浏览(39)
  • Android中ELF文件结构浅析(一)

    可以用以下这个数据结构体来描述文件头。 其中各个成员的意义如下:         从头开始的16个字节含有 ELF 文件的识别标志,并且提供了一些用于解码 和解析文件内容的数据,是不依赖于具体操作系统的。 0000         7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00 1.1 File identi

    2024年02月19日
    浏览(38)
  • axf文件、hex文件、bin文件区别

    axf文件、hex文件与bin文件都可以运行在stm32,都存储了源代码通过编译器生成的机器码。 axf文件:编译默认生成的文件,包含 代码数据和调试信息 ,在MDK里进行debug调试用的文件。 hex文件:使用十六进制符号表示的代码记录, 包含 代码数据和地址信息 ,下载器可以根据地

    2023年04月23日
    浏览(38)
  • EVM6678L 开发教程: IBL-TFTP 引导 elf 文件

    参考: \\\"C:timcsdk_2_01_02_06toolsboot_loaderexamplesi2ctftpdocsREADME.txt\\\" 此教程介绍如何在 EVM6678L 开发板上实现 IBL-TFTP 引导 elf 文件. 下载并安装 Tftpd64-#.#-setup.exe 运行 tftpd64.exe 设置 Current Directory(当前目录) (比如: D:/tftp ), 其他保持默认即可. 打开CCS. 导入工程: i2ctftpboot_evmc6678l (搜索

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包