- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
elf符号表
ELF符号表结构(1)
ELF文件中的符号表往往是文件中的一个段,段名一般叫.symtab。符号表的结构很简单,它是一个Elf32_Sym结构(32位ELF文件)的数组,每个Elf32_Sym结构对应一个符号。这个数组的第一个元素,也就是下标0的元素为无效的未定义符号。Elf32_Sym的结构定义如下:
typedef struct {Elf32_Word st_name;Elf32_Addr st_value;Elf32_Word st_size;unsigned char st_info;unsigned char st_other;Elf32_Half st_shndx;} Elf32_Sym;
这几个成员的定义如表3-14所示。
表3-14
st_name
符号名。这个成员包含了该符号名在字符串
表中的下标(还记得字符串表吧?)
st_value
符号相对应的值。这个值跟符号有关,可能
是一个绝对值,也可能是一个地址等,不同的符号,
它所对应的值含义不同,见下文“符号值”
st_size
符号大小。对于包含数据的符号,这个值是该数据
类型的大小。比如一个double型的符号它占用8个字节。
如果该值为0,则表示该符号大小为0或未知
st_info
符号类型和绑定信息,见下文“符号类型与绑定信息”
st_other
该成员目前为0,没用
st_shndx
符号所在的段,见下文“符号所在段”
符号类型和绑定信息(st_info) 该成员低4位表示符号的类型(Symbol Type),高28位表示符号绑定信息(Symbol Binding),如表3-15、表3-16所示。表3-15
符号绑定信息
宏定义名
值
说明
STB_LOCAL
0
局部符号,对于目标文件的外部不可见
STB_GLOBAL
1
全局符号,外部可见
STB_WEAK
2
弱引用,详见“弱符号与强符号”
表3-16
符号类型
宏定义名
值
说明
STT_NOTYPE
0
未知类型符号
STT_OBJECT
1
该符号是个数据对象,比如变量、数组等
STT_FUNC
2
该符号是个函数或其他可执行代码
STT_SECTION
3
该符号表示一个段,这种符号必须是
STB_LOCAL的
STT_FILE
4
该符号表示文件名,一般都是该目标文
件所对应的源文件名,它一定是
STB_LOCAL类型的,并且它的
st_shndx一定是SHN_ABS
符号所在段(st_shndx)如果符号定义在本目标文件中,那么这个成员表示符号所在的段在段表中的下标;但是如果符号不是定义在本目标文件中,或者对于有些特殊符号,sh_shndx的值有些特殊,如表3-17所示。
表3-17
符号所在段特殊常量
宏定义名
值
说明
SHN_ABS
0xfff1
表示该符号包含了一个绝对的值。
比如表示文件名的符号就属于这种类型的
SHN_COMMON
0xfff2
表示该符号是一个“COMMON块”
类型的符号,一般来说,未初始化的全局
符号定义就是这种类型的,比如
SimpleSection.o里面的global_uninit_var。
有关“COMMON”详见“深入静态链接”
之“COMMON块”
SHN_UNDEF
0
表示该符号未定义。这个符号表示该符号
在本目标文件被引用到,但是定义在其他目标文件中
符号值(st_value) 我们前面已经介绍过,每个符号都有一个对应的值,如果这个符号是一个函数或变量的定义,那么符号的值就是这个函数或变量的地址,更准确地讲应该按下面这几种情况区别对待。
在目标文件中,如果是符号的定义并且该符号不是COMMON块类型的(即st_shndx不为SHN_COMMON,具体请参照深入静态链接一章中的COMMON块),则st_value表示该符号在段中的偏移。即符号所对应的函数或变量位于由st_shndx指定的段,偏移st_value的位置。这也是目标文件中定义全局变量的符号的最常见情况,比如SimpleSection.o中的func1、main和global_init_var。
在目标文件中,如果符号是COMMON块类型的(即st_shndx为SHN_COMMON),则st_value表示该符号的对齐属性。比如SimpleSection.o中的global_uninit_var。
在可执行文件中,st_value表示符号的虚拟地址。这个虚拟地址对于动态链接器来说十分有用。我们将在第3部分讲述动态链接器。
根据上面的介绍,我们对ELF文件的符号表有了大致的了解,接着将以SimpleSection.o里面的符号为例子,分析各个符号在符号表中的状态。这里使用readelf工具来查看ELF文件的符号
您可能关注的文档
最近下载
- GB∕T 37903-2019 数控压力机可靠性评定方法.pdf
- SL 274-2020 碾压式土石坝设计规范.docx
- 《植物生产与环境》课程标准.pdf VIP
- 《植物生产与环境》课程标准.pdf
- bosch博世 GBH 5-38 X GBH 5-38 D 使用说明书.pdf
- 最新版入团志愿书模板.pdf
- 职业技术学院园林技术专业《植物生产环境》课程标准 .pdf VIP
- 国内某600MW机组双烟道直流炉省煤器旁路特性研究.pdf VIP
- 《中医基础理论》课件——津液的代谢和生理功能.pptx VIP
- 8 推翻帝制 民族觉醒 第一课时说课稿 -2023-2024学年道德与法治五年级下册统编版.docx
文档评论(0)