ELF文件格式解析

1. ELF文件简介

首先,你需要知道的是所谓对象文件(Object files)有三个种类:

  1. 可重定位的对象文件(Relocatable file)
    这是由汇编器汇编生成的 .o 文件。后面的链接器(link editor)拿一个或一些 Relocatable object files 作为输入,经链接处理后,生成一个可执行的对象文件 (Executable file) 或者一个可被共享的对象文件(Shared object file)。我们可以使用 ar 工具将众多的 .o Relocatable object files 归档(archive)成 .a 静态库文件。如何产生 Relocatable file,你应该很熟悉了,请参见我们相关的基本概念文章和JulWiki。另外,可以预先告诉大家的是我们的内核可加载模块 .ko 文件也是 Relocatable object file。

  2. 可执行的对象文件(Executable file)
    这我们见的多了。文本编辑器vi、调式用的工具gdb、播放mp3歌曲的软件mplayer等等都是Executable object file。你应该已经知道,在我们的 Linux 系统里面,存在两种可执行的东西。除了这里说的 Executable object file,另外一种就是可执行的脚本(如shell脚本)。注意这些脚本不是 Executable object file,它们只是文本文件,但是执行这些脚本所用的解释器就是 Executable object file,比如 bash shell 程序。

  3. 可被共享的对象文件(Shared object file)
    这些就是所谓的动态库文件,也即 .so 文件。如果拿前面的静态库来生成可执行程序,那每个生成的可执行程序中都会有一份库代码的拷贝。如果在磁盘中存储这些可执行程序,那就会占用额外的磁盘空 间;另外如果拿它们放到Linux系统上一起运行,也会浪费掉宝贵的物理内存。如果将静态库换成动态库,那么这些问题都不会出现。动态库在发挥作用的过程 中,必须经过两个步骤:

a) 链接编辑器(link editor)拿它和其他Relocatable object file以及其他shared object file作为输入,经链接处理后,生存另外的 shared object file 或者 executable file。
b)在运行时,动态链接器(dynamic linker)拿它和一个Executable file以及另外一些 Shared object file 来一起处理,在Linux系统里面创建一个进程映像。

ELF 文件标准里把系统中采用ELF 格式的文件归类为四种:

  • 可重定位文件,Relocatable File ,这类文件包含代码和数据,可用来连接成可执行文件或共享目标文件,静态链接库归为此类,对应于Linux 中的.o ,Windows 的 .obj.

  • 可执行文件,Executable File ,这类文件包含了可以直接执行的程序,它的代表就是ELF 可执行文件,他们一般没有扩展名。比如/bin/bash ,Windows 下的 .exe

  • 共享目标文件,Shared Object File ,这种文件包含代码和数据,链接器可以使用这种文件跟其他可重定位文件的共享目标文件链接,产生新的目标文件。另外是动态链接器可以将几个这种共享目标文件与可执行文件结合,作为进程映像来运行。对应于Linux 中的 .so,Windows 中的 DLL

  • 核心转储文件,Core Dump File,当进程意外终止,系统可以将该进程地址空间的内容及终止时的一些信息转存到核心转储文件。 对应 Linux 下的core dump。

作者:刀背藏身
链接:https://www.jianshu.com/p/af9766222816
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

(0)

相关推荐

  • ARM 之一 ELF文件、镜像(Image)文件、可执行文件、对象文件 详解

    ELF 文件规范   ELF(Executable and Linking Format)是一个二进制文件规范.用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的 ...

  • 从创建进程到进入main函数,发生了什么?

    前几天,读者群里有小伙伴提问:从进程创建后,到底是怎么进入我写的main函数的? 今天这篇文章就来聊聊这个话题. 首先先划定一下这个问题的讨论范围:C/C++语言 这篇文章主要讨论的是操作系统层面上对 ...

  • gzip文件格式解析

    在windows下使用UltraEdit打开后缀的.gz的文件显示的数据格式如下: 2 bytes  GZIP标志字节:0x1f, 0x8b (\037 \213)   1 byte   压缩方法: ...

  • 轻松理解bin、hex、axf和elf文件格式

    在嵌入式软件开发中,bin.hex.axf和elf这四种格式的文件很常见.之前我分享的STVP.ST-LINK Utility.STM32CubeProg这些下载编程工具的时候,都用到了bin.hex ...

  • 单片机烧录用的hex文件,文件格式解析

    一hex文件解析hex文件可以通过UltraEdit.Notepad++.记事本等工具打开,用Notepad++打开之后会看到如下数据内容. 使用Notepad++打开后会不同含义的数据其颜色不同.每 ...

  • ELF文件格式的详解

    ELF文件格式的详解 1.说明 2.elf文件的基本格式 3.elf文件的头部信息 4.elf文件的节区(Section) 4.1 节区的作用 4.2 节区的组成 5.elf文件的段(Segment) ...

  • MP4文件格式的解析,以及MP4文件的分割算法

    mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的"媒 ...

  • mp4文件格式详细解析

    目录 概述 mp4文件基本信息 封装格式重要概念 重要box介绍 其他box介绍 实用技术 开源软件 参考 [1] ISO/IEC 14496-12:2015 [2] wikipedia/MPEG-4 ...

  • 时序数据库 Apache-IoTDB 源码解析之文件格式简介(三)

    上一章聊到在车联网或物联网中对数据库的需求,以及 IoTDB 的整体架构,详情请见: 时序数据库 Apache-IoTDB 源码解析之系统架构(二) 打一波广告,欢迎大家访问IoTDB 仓库,求一波 ...

  • 《中医舌诊》,26张临床高清舌诊图,附带解析,史上最全!

    掌纹医学,看手知健康,疾病早知道..... 舌质 色:淡紫.淡白: 形:偏嫩.少量瘀点.轻度齿痕. 舌苔 苔质:薄.润: 苔色:白. [临床意义] 阳虚.气虚.气滞等原因导致的气血瘀滞. 舌质 色:淡 ...

  • 初中数学:二次根式的考点解析 常见误区 隐含条件 经典例题

    成才路上 初中精品学习资料 104篇原创内容 公众号 二次根式是初中数学的一个重要内容,要求了解二次根式和最简二次根式的概念,理解二次根式的性质,熟练地进行二次根式的加减乘除及混合运算. 今天方法君就 ...