ELF 文件格式中信息冗余问题(符号表与重定位项)

2018-03-23 23:44:08 +08:00
 byaiu

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

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

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

3559 次点击
所在节点    Linux
4 条回复
tomychen
2018-03-24 11:32:50 +08:00
st_value; /* Value of the symbol */

r_offset; /* Location at which to apply the action */
r_info; /* index and type of relocation */

我觉得应该从功能上去区分,而不是从“值”上去区分。
byaiu
2018-03-24 23:38:07 +08:00
@tomychen

我后来想到了这么一个理由:

这两者的信息确实是重复的,但是重定位表所在的 section 会一直存在,而符号表所在的 section 有可能会被 strip 掉。

系统里安装的各种 so 都是 strip 之后的(少了.symtab 和.strtab ),应用程序在加载的时候会从重定位表(.dynsym )去寻找符号。一般来说自己定义的函数和用到的外部函数引用也会在.dynsym 里。
byaiu
2018-03-25 07:21:01 +08:00
@tomychen 我上个回答还是不对…

文不对题
tomychen
2018-03-25 15:13:45 +08:00
其实我想说的是,这几个东西的“作用”并不是重复的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440921

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX