解析EFL文件中符号表读取

发布时间 2023-08-15 11:13:59作者: 第9527号嵌入式菜鸟

符号表表头

Linux 中使用指令查看完整读取elf文件

readelf -a example.elf

Num: Value Size Type Bind Vis Ndx Name

代表含义

Num 符号编号

Value 符号值,取决于上下文

Size 符号值

Type 符号类型,例如函数、对象、文件(源文件名称)、节(内存节)或未指定类型的绝对符号或未定义。

Bind 绑定属性,定义了符号的可见性和链接行为。例如,全局绑定意味着符号在所有文件中都可见,局部绑定仅在定义它的文件内可见,弱绑定类似于全局绑定,但符号可以被覆盖。

Vis 符号可见性,可以是默认、受保护、隐藏或内部。

Ndx 符号定义所在的节头表索引。ABS表示绝对值:不调整任何节地址的重定位

Name 符号名称。

符号类型包括:

STT_NOTYPE:未指定类型的符号。
STT_OBJECT:数据对象,例如变量或数组等。
STT_FUNC:函数或其他可执行代码。
STT_SECTION:与节相关的符号,通常是节的名称。
STT_FILE:源文件名称。

绑定属性

定义了符号的可见性和链接行为,包括:

STB_LOCAL:局部符号,仅在定义它的目标文件内可见。
STB_GLOBAL:全局符号,在所有目标文件中可见。
STB_WEAK:弱符号,在全局符号和局部符号之间。

符号可见性

定义了符号在目标文件外部的可见性,包括:

STV_DEFAULT:默认可见性,与全局和弱符号相关联。
STV_INTERNAL:仅供内部使用,不应在目标文件外部可见。
STV_HIDDEN:不可在目标文件外部引用,但可以通过动态链接器访问。
STV_PROTECTED:不可在共享库外部预先绑定,但可以通过动态链接器访问。