String Sections
.strtab: String Table
该节区描述默认的字符串表,包含了一系列的以 NULL 结尾的字符串。ELF 文件使用这些字符串来存储程序中的符号名,包括
变量名
函数名
该节在运行的过程中不需要加载,只需要加载对应的子集 .dynstr 节。
一般通过对字符串的首个字母在字符串表中的下标来索引字符串。
字符串表的首尾字节都是NULL。此外,索引为 0 的字符串要么没有名字,要么就是名字为空,其解释依赖于上下文。字符串表也可以为空,相应的,其节区头部的 sh_size 成员将为 0。在空字符串表中索引大于 0 的下标显然是非法的。
一个节区头部的 sh_name 成员的值为其相应的节区头部字符串表节区的索引,此节区由 ELF 头的 e_shstrndx 成员给出。下图给出了一个包含 25 个字节的字符串表,以及与不同索引相关的字符串。
索引
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
0
\0
n
a
m
e
.
\0
V
a
r
10
i
a
b
l
e
\0
a
b
l
e
20
\0
\0
x
x
\0
其中包含的字符串有
索引
字符串
0
none
1
name.
7
Variable
11
able
16
able
24
空字符串
可以看出
字符串表索引可以引用节区中任意字节。
字符串可以出现多次。
可以存在对子字符串的引用。
同一个字符串可以被引用多次。
字符串表中也可以存在未引用的字符串。
这部分信息在进行 strip
后就会消失。
.shstrtab: Section Header String Table
该节区与 .strtab
的存储结构类似,不过该节区存储的是节区名的字符串。
Last updated