链接器重新遍历一次可执行文件和每个共享对象的重定位表,将 GOT 和 PLT 所需要的信息填入修正(动态链接重定位表)
重定位完成之后,对每个共享对象的 .init
段执行代码,完成共享对象的初始化过程。C++ 的全局/静态对象就要通过 .init
初始化。同时当进程推出的时候会执行 .finit
段完成析构的任务
如果进程的可执行文件也有 .init
段,动态链接器不会执行它,而是等到程序初始化的时候才执行
完成重定位和初始化,所有的准备工作已经完成,所需要的所有共享对象也已经装载完成,此时动态链接器如释重负,将进程控制权重新移交给程序的入口