技术解析

ELF 文件格式中信息冗余问题(符号表与重定位项)
0
2021-06-24 12:56:13
idczone

ELF 文件中符号表的每一项都有一个st_value可以表示该符号在所在段的偏移量。

重定位项的r_offset所表示的也是符号所在段的偏移量;而重定位项里的r_info里也包含了对符号表里某个符号的引用。

这样一来,st_valuer_offset是不是就是相同信息的两次表述了?


st_value; /* Value of the symbol */
r_offset; /* Location at which to apply the action */
r_info; /* index and type of relocation */
我觉得应该从功能上去区分,而不是从“值”上去区分。


我后来想到了这么一个理由:
这两者的信息确实是重复的,但是重定位表所在的 section 会一直存在,而符号表所在的 section 有可能会被 strip 掉。
系统里安装的各种 so 都是 strip 之后的(少了.symtab 和.strtab ),应用程序在加载的时候会从重定位表(.dynsym )去寻找符号。一般来说自己定义的函数和用到的外部函数引用也会在.dynsym 里。

我上个回答还是不对…
文不对题

其实我想说的是,这几个东西的“作用”并不是重复的。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服