首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

在交叉编译中,常见的ELF(elf)到底是什么意思?

  • 25-03-05 02:41
  • 4419
  • 6059
blog.csdn.net

ELF 是 Executable and Linkable Format 的缩写,中文翻译为“可执行与可链接格式”。它是一种通用的文件格式,主要用于存储可执行文件、目标文件(编译后的中间文件)、动态库(.so 文件)以及内存转储文件(core dump)。ELF 是现代 Unix 系统(包括 Linux 和一些类 Unix 系统)上的主要文件格式。

ELF 的历史和意义

  • 历史:ELF 文件格式最早由 System V ABI 标准定义,于 1990 年被发布。它取代了较早的文件格式(如 a.out 和 COFF),成为主流的可执行文件格式。
  • 意义:ELF 设计具有高度的可扩展性和灵活性,支持多种处理器架构和操作系统,方便编译器、链接器和操作系统内核的交互。

ELF 文件的结构

一个 ELF 文件由多个部分组成,以下是主要的组成部分:

  1. ELF Header(ELF 文件头):

    • 描述文件的基本信息,例如文件类型(可执行文件、共享库、目标文件等)、目标架构(如 x86、ARM)、位宽(32 位或 64 位)等。
  2. Program Header(程序头):

    • 描述运行时所需的段信息(如代码段、数据段),供操作系统加载器使用。
  3. Section Header(节头):

    • 描述文件中的各个节,例如 .text(代码段)、.data(数据段)、.bss(未初始化数据段)等,供链接器和调试器使用。
  4. Sections and Segments(节和段):

    • 节(Section):静态信息,如代码、符号表、调试信息等。
    • 段(Segment):运行时信息,用于加载到内存的程序区域。

ELF 的优势

  1. 跨平台性:支持多种处理器架构和操作系统。
  2. 模块化设计:支持动态链接和共享库,提升了程序的灵活性和资源利用效率。
  3. 调试和诊断支持:提供丰富的调试信息(如符号表和堆栈跟踪),便于开发者定位问题。

常见的 ELF 文件类型

  1. 可执行文件:如普通的应用程序(.out 文件)。
  2. 动态库文件:如 .so 文件。
  3. 目标文件:编译但未链接的中间文件(.o 文件)。
  4. 核心转储文件:程序崩溃后的内存转储,用于调试(core dump)。

通过工具如 readelf, objdump 和 file,可以查看和分析 ELF 文件的具体内容。

以下是用 readelf读取一个动态链接库类型的ELF文件的header信息的示例:

readelf -h /home/book/usedlib/freetype-2.10.2/tmp/lib/libfreetype.so
  • 1

在这里插入图片描述
从结果截图可以清晰看出这个ELF的动态库文件是32位还是64位,并且还是运行于ARM架构上的动态库文件。

以下是用 readelf读取一个可执行类型的ELF文件的header信息的示例:

readelf -h /home/book/usedlib/tslib-1.21/tmp/bin/ts_test_mt
  • 1

运行结果如下:

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x1157c
  Start of program headers:          52 (bytes into file)
  Start of section headers:          29524 (bytes into file)
  Flags:                             0x5000400, Version5 EABI, hard-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

上需的运行结果显示,这个文件是一个运行于ARM平台上的可执行文件。

昊虹嵌入式技术交流群
QQ群名片
注:本文转载自blog.csdn.net的昊虹AI笔记的文章"https://blog.csdn.net/wenhao_ir/article/details/144773938"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top