博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态链接的步骤
阅读量:5057 次
发布时间:2019-06-12

本文共 671 字,大约阅读时间需要 2 分钟。

  1. 动态链接器自举

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

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

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

 

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

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

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

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

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

 

  3. 开始重定位和初始化

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

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

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

转载于:https://www.cnblogs.com/gradyblog/p/8971847.html

你可能感兴趣的文章
js兼容性
查看>>
Random.Next
查看>>
sql 随笔
查看>>
Bootstrap多层模态框modal嵌套问题
查看>>
八大生物识别技术
查看>>
windows自带记事本导致文本文件(UTF-8编码)开头三个字符乱码问题
查看>>
Elasticsearch 基于 URL 的搜索请求
查看>>
Atitit. 最佳实践 QA----减少cpu占有率--cpu占用太高怎么办
查看>>
Android输入法扩展之外接键盘中文输入
查看>>
mybatis generator插件开发
查看>>
hibernate 多对多 最佳实践
查看>>
ios至于理解锚
查看>>
Windows下搭建Eclipse+Android4.0开发环境
查看>>
利用Excel批量高速发送电子邮件
查看>>
C#:总结页面传值几种方法
查看>>
HDU 1159 - Common Subsequence [最长公共子序列]
查看>>
Python学习总结
查看>>
CamShift算法研究(基于opencv)
查看>>
BF算法
查看>>
DataTable 基本转换简单实例
查看>>