ELF文件格式学习

ELF文件基本结构

简介

ELF(Executable and Linkable Format)文件是Linux中的目标文件, 分三类:

  1. 可重定位文件(Relocatable File), 包含由编译器生成的代码数据, 链接器会把它和别的目标文件链接起来, 创建可执行文件或者共享目标文件, 后缀一般是.o
  2. 可执行文件(Executable File), 即用来运行的程序
  3. 共享目标文件(Shared Object File), 包含代码和数据, 是我们所称的库文件, 一般以.so结尾, 有两种使用场景
    1. 链接器(Link eDitor, ld)可能会处理它和其它可重定位文件以及共享目标文件, 生成另一个目标文件
    2. 动态链接器(Dynamic Linker)将它和可执行文件以及其它共享目标组合在一起生成进程镜像

文件格式

用一张ctf-wiki的图来看一下

目标文件的格式有两种, 一种是用来链接的文件, 一种是可执行文件

数据形式

字符表示

ELF Header

Program Header Table

Section Header Table

程序加载

程序链接

程序执行流程

Reference