ELF 文件中符号表的每一项都有一个st_value
可以表示该符号在所在段的偏移量。
重定位项的r_offset
所表示的也是符号所在段的偏移量;而重定位项里的r_info
里也包含了对符号表里某个符号的引用。
这样一来,st_value
和r_offset
是不是就是相同信息的两次表述了?
1
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 */ 我觉得应该从功能上去区分,而不是从“值”上去区分。 |
2
byaiu OP @tomychen
我后来想到了这么一个理由: 这两者的信息确实是重复的,但是重定位表所在的 section 会一直存在,而符号表所在的 section 有可能会被 strip 掉。 系统里安装的各种 so 都是 strip 之后的(少了.symtab 和.strtab ),应用程序在加载的时候会从重定位表(.dynsym )去寻找符号。一般来说自己定义的函数和用到的外部函数引用也会在.dynsym 里。 |
4
tomychen 2018-03-25 15:13:45 +08:00
其实我想说的是,这几个东西的“作用”并不是重复的。
|