深入理解计算机系统(第三版)读书笔记七(ELF文件解析)

本文是《深入理解计算机系统》第三版的读书笔记,详细介绍了ELF文件的结构,包括文件头、节头表、字符串表和符号表,阐述了各部分的作用和数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. ELF文件格式概述

ELF文件分为:链接时的目标文件和执行时的目标文件。如下图:
在这里插入图片描述
ELF文件头:文件最开始的地方,包含整个文件的信息结构。
程序头表:在运行时必须要有的,告诉操作系统如何创建进程的镜像。
节:对于链接过程而言的,每个节中包含指令数据、符号数据和重定位数据等等。
段:运行时必须要有的,每个段可以包含多个节。
节头表:包含文件中节的所有信息,文件中的每个节都需要在节头表中有一个对应的注册项。

2. ELF文件头

文件头含有整个文件的结构信息。结构体表示如下:

#define EI_NIDENT 16
typedef struct {
    unsigned char e_ident[EI_NIDENT];
    Elf32_Half e_type;//表示目标文件属于哪种类型
    Elf32_Half e_machine;//处理器体系结构
    Elf32_Word e_version;//文件版本
    Elf32_Addr e_entry;//程序入口的虚拟地址,只有可执行文件有。
    Elf32_Off e_phoff;//程序头表在文件中的偏移量,没有为0
    Elf32_Off e_shoff;//节头表在文件中的偏移量
    Elf32_Word e_flags;//处理器特定的标志
    Elf32_Half e_ehsize;//ELF文件头的大小
    Elf32_Half e_phentsize;//程序头表中每一项的大小
    Elf32_Half e_phnum;//程序头表一共有多少项
    Elf32_Half e_shentsize;//节头表中每一项的大小
    Elf32_Half e_shnum;//节头表一共有多少项
    Elf32_Half e_shstrndx;//节头表中与节名字表相对应的表项的索引。
} Elf32_Ehdr;

3. 节头表

ELF文件中包含很多“节”,这些“节”的信息都登记在节头表中,通过每一个表项可以定位到对应的节,节头表中每一个表项的数据结构如下:

typedef struct {
    Elf32_Word sh_name;//本节的名字,整个名字的字符串不存储在这里,它只是一个索引,指向“字符串表”节中的某个位置
    Elf32_Word sh_type;//节的类型
    Elf32_Word sh_flags;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值