elf section类型_ELF Format 笔记(四)—— 节(Section)

本文详细介绍了ELF文件中的Section,包括Elf32_Shdr结构的各个字段,如sh_name、sh_type、sh_flags等,并解释了不同字段的意义,如SHF_WRITE、SHF_ALLOC等标志位,以及section在进程运行时的角色。
摘要由CSDN通过智能技术生成

ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

ELF 文件可以包含很多 section,所有的 section 都在 section header table 中有对应的一项,每个 section header 都是一个 Elf32_Shdr 结构,用于描述相应 section 的信息。

ELF Header 中的 e_shoff 给出了 section header table 在 ELF 文件中的字节偏移量,e_shentsize 指明在 section header table 中的每一项的字节大小,e_shnum 指明共有多少项。

Elf32_Shdr 结构:

1 typedef struct{2 Elf32_Word sh_name;3 Elf32_Word sh_type;4 Elf32_Word sh_flags;5 Elf32_Addr sh_addr;6 Elf32_Off sh_offset;7 Elf32_Word sh_size;8 Elf32_Word sh_link;9 Elf32_Word sh_info;10 Elf32_Word sh_addralign;11 Elf32_Word sh_entsize;12 } Elf32_Shdr;

sh_name:section 的名字。这里其实是一个索引,指出 section 的名字存储在 .shstrtab 的什么位置。.shstrtab是一个存储所有 section 名字的字符串表。

sh_type:section 的类型,上一篇笔记已经学习过。

sh_flags:通过 1-bit flag 定义一些属性。

SHF_WRITE:此 section 中包含的数据,在进程运行时可写。

SHF_ALLOC:此 section 在进程运行时要占用内存。

一些控制用的 section 在进程运行时是不占用内存的,比如动态链接器可能只把 section 中的一些信息读出来,用完就拉倒了,没必要再存储到进程镜像中。

SHF_EXECINSTR:此 section 存储的是可执行的机器码。

SHF_MASKPROC:保留的,不用管。

sh_addr:如果此 section 需要映射到进程空间,此成员指定映射的起始地址。如不需映射,此值为 0。

sh_offset: 此 section 相对于文件开头的字节偏移量。如果 section 类型为 SHT_NOBITS,表明该 section 在文件中不占空间,这时 sh_offset 没什么用。

sh_size:此 section 的字节大小。如果 section 类型为 SHT_NOBITS,就不用管 sh_size 了。

不同类型的 section 中 sh_link 和 sh_info 的意义不同:

基本上就是针对不同的 section 类型,分别给出字符串表、符号表等所在的 section 在 section header table 中的索引。

sh_addralign:指明此 section 的 sh_addr 向几字节对齐,sh_addralign 应该是 2 的正整数倍。如果为 0 或 1,表明此 section 没有字节对齐约束。

sh_entsize:有些节的内容是一张表,其中每个表项的大小固定,比如符号表。对于这种表,本成员指定其每个表项的大小。如果此值为 0,表明本 section 不好含 XX 表。

section header table 中的索引为 0(SHN_UNDEF) 的这一项特殊,内容为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值