为何PIC中首次函数调用解析与数据引用采用不同实现方式?
PIC中首次函数调用的解析流程
咱们先把PIC(位置无关代码)里首次函数调用的完整解析流程拆解清楚:
- 跳转到该符号的
PLT表项。 - 跳转到该符号的
GOT表项。 - 跳转回
PLT表项并将一个偏移量压入栈中,该偏移量实际是描述符号修补方式的Elf_Rel结构。 - 跳转到
PLT存根表项。 - 压入指向
link_map结构的指针,以便链接器找到符号所属的库。 - 调用解析例程。
- 修补
GOT表项。
这和仅使用GOT表的数据引用方式有着明显的不同。
那么,为何会存在这种差异?为何要采用两种不同的实现方式?
内容的提问来源于stack exchange,提问作者ray an
相关产品推荐
相关产品推荐

