码迷,mamicode.com
首页 > 其他好文 > 详细

动态链接的步骤

时间:2018-04-29 21:12:55      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:str   连接   16px   mic   global   动态链接   位置   符号   重定位   

  1. 动态链接器自举

    (1)动态链接器本身不依赖任何共享对象

    (2)通过一段精巧的启动代码完成自身全局和静态变量的重定位而在过程中又不会用到全局和静态变量

    而这个有限制条件的启动代码过程被称为自举

 

  2.将依赖的共享对象映射到进程空间

         完成自举后,动态连接器将可执行文件和链接器本身的符号表都合并到一个全局符号表(Global Symbol Table)中,

     然后连接器开始寻找执行文件所依赖的共享对象(可执行文件的".dynamic"段中,有一种类型时DT_NEED,它标明了可执行文件所依赖的共享对象)。

     由此链接器将按照广度搜索算法(也可以时其他搜索算法)将所有依赖的共享对象的名字放入一个集合容器中,,然后读取相应的ELF文件头和“.dynamic”段,然后

   将它相应的代码段和数据段映射到进程空间中。

 

  3. 开始重定位和初始化

    完成上述步骤后,所有依赖的共享对象已全部映射到进程空间。链接器开始遍历执行文件和每个共享对象的重定位表(.dynamic段中有重定位表的位置),将它们的GOT/PLT

    的每个需要重定位的位置进行修正(GOT/PLT就在.dynamic的下方,且动态链接器已有进程的全局符号表,可以通过它进行修正)

            初始化就是在重定位完成以后,如果某个或多个共享对象拥有“.init”段,那么将执行.init段中的代码,完成共享对象特有的初始化过程

动态链接的步骤

标签:str   连接   16px   mic   global   动态链接   位置   符号   重定位   

原文地址:https://www.cnblogs.com/gradyblog/p/8971847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!