Skip to content

ELF可执行文件的结构详解

· 6 min · Linux / 嵌入式开发 / STM32 / ELF / 学习笔记

一、ELF文件是什么#

ELF可以是目标文件、静态或者动态的链接文件、可执行文件。

前两种文件是中间文件,目标文件需要链接成为可执行文件或者链接文件,最终执行的只有可执行文件。

一个具有代码的源文件,经过预编译,编译,汇编之后得到了.o目标文件,通过将.o文件已经是具有实际机器指令的文件。

将所有的目标文件和静态库还有动态库一起链接起来,就得到了最终的可执行文件。

二、内存的基本构成#

要了解ELF文件的构成,我们需要知道执行一个程序的内存是什么样的。

一个程序在运行过程中会占用:

根据这些我们可以知道,stack和heap是程序运行时才会使用到,那么elf文件中基本存储的就是data数据段,也就是全局变量和静态变量,以及执行的text代码段。

实际上,数据段在程序中被分成了两部分来存储分别是data和bss段。data段存储已经初始化的静态变量和全局变量,bss段存储没有初始化的静态变量和全局变量。如果是被初始化为0的静态变量或者全局变量也会被存放到bss段。为什么会专门分成data和bss两部分呢?

对data段来说每一个变量都需要有一个值,而bss段中则不需要,只需要记录变量本身的长度,在操作系统加载程序时才会将这些bss段的变量初始化为0,节省了elf文件的空间。

三、ELF实际组成#

四、在嵌入式中的实际应用#

生成静态链接库和动态链接库#

1. 静态链接库#

2. 动态链接库#