ELF 文件 动态连接 - 延迟绑定(PLT)
PLT 全称:Procedure Linkage Table ,直译:过程连接表
由于在动态连接中,程序的模块之间包含了大量的函数引用,所以在程序开始执行前,动态链接会耗费较多的时间用于模块之间函数引用的符号查找以及重定位工作。
但是在程序实际运行时很多函数其实时没有调用到的,这里就时一个优化的点,于是就引入了延迟绑定技术(PLT)。
基本思想:
但函数第一次被用到时才由动态连接器进行绑定(符号查找,重定位等),暂没用到就先不绑定。这样几句大大加快了程序的启动速度。
PLT将GOT(Global Offset Table 全局偏移表)拆分成了两个表:".got" 和 ".got.plt" (正好是PLT的小写形式)
.got 用来保存全局变量引用的地址
.got.plt 用来保存函数引用的地址,所有外部函数的引用都被分离到了这里