我们知道动态链接比静态链接慢的主要原因是动态链接下对于全局和静态的数据访问都要进行复杂的GOT定位,然后间接寻址;对于模块间的调用也要先定位GOT,然后再进行间接跳转,如此一来,程序的运行速度必定会减慢...另外一个减慢运行速度的原因是动态链接的链接工作在运行时完成,即程序开始执行时,动态链接器都要进行一次链接工作,正如我们上面提到的,动态链接器会寻找并装载所需要的共享对象,然后进行符号査找地址重定位等工作...,这些工作势必减慢程序的启动速度。...延迟绑定实现
在动态链接下,程序模块之间包含了大量的函数引用(全局变量往往比较少,因为大量的全局变量会导致模块之间耦合度变大),所以在程序开始执行前,动态链接会耗费不少时间用于解决模块之间的函数引用的符号查找以及重定位...()函数中,bar()函数返回的时候会根据堆栈里面保存的EIP直接返回调用者,而不会再继续执行bar()plt中第二条指令的开始的那段代码,那段代码指挥在符号未被解析的时候执行一次;
上面描述的是PLT