zoukankan      html  css  js  c++  java
  • elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系

    一、介绍

    .plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址

    .rel.dyn重定向表,在程序启动时就需要重定位完成。

    .rel.plt保存了重定位表的信息,可以使用lazy的连接方式

    .got据说是保存了elf文件本身的各个符号的偏移量,即不要动态链接,未证明

    .got.plt保存了重定位地址。

    二、调用过程分析

    比如printf是一个重定位符号,需要连接该符号时过程是这样:

      main函数call  .plt段中的一个地址,这里的第一句话就是调转到.got.plt中的保存的printf的地址,如果是第一次,那么保存的地址就是.plt中的下一句话,这个下一句话就是压入这个符号在.rel.plt中的重定位表的偏移量,然后ld程序就会根据重定位表中的信息加上这个偏移量找到这个地址,保存到重定位表所指向的地址中,这个地址其实就是.got.plt段的一个地址

      第二次调用时就可以直接获取到.got.plt中保存的地址了。

    本文来自博客园,作者:Mr-xxx,转载请注明原文链接:https://www.cnblogs.com/MrLiuZF/p/15075999.html

  • 相关阅读:
    一文搞懂字符集
    机器视觉之eVision
    PID调节
    激光切割质量主要影响因素
    155. 最小栈
    111.二叉树最小深度
    110. 平衡二叉树
    108.将有序数组转换为二叉搜索树
    107. 二叉树的层次遍历 II
    104. 二叉树的最大深度
  • 原文地址:https://www.cnblogs.com/MrLiuZF/p/15075999.html
Copyright © 2011-2022 走看看