转自http://blog.csdn.net/guiguzi5512407/article/details/53012878 仅供个人学习

0x01. dl-resolve解析原理

return to dl-resolve 主要是利用Linux glibc的延迟绑定技术(Lazy binding)。Linux下glibc库函数在第一次被调用的时候,才会去寻找函数的真正地址然后进行绑定。在这一过程中,主要由过程链接表(PLT)提供跳转到解析函数的胶水代码,然后将函数的真正地址回填到函数的全局偏移表中,再将控制权交给需要解析的函数。

重定位表(.rel.plt和.rel.dyn)

重定位表中.rel.plt用于函数重定位,.rel.dyn用于变量重定位。

r_offset即为该函数在.got.plt中的地址(就是函数的.got.plt地址)。

函数重定位表表项为地址解析函数提供一个参数(r_info的前24位),定位需要解析的函数。

typedef struct
{Elf32_Addr          /* Address */Elf32_Word             /* Relocation type and symbol index */
} Elf32_Rel;typedef struct
{Elf64_Addr    r_offset;       /* Address */Elf64_Xword   r_info;         /* Relocation type and symbol index */Elf64_Sxword  r_addend;       /* Addend */
} Elf64_Rela;

全局偏移表(.got和.got.plt)

全局偏移表中.got 保存全局变量偏移表,.got.plt 保存全局函数偏移表。

刚开始全局函数偏移表(.got.plt)中存放的是:过程链接表PLT中该函数胶水代码中的第二条指令地址。在函数解析之后,才存放了函数的真正地址。

动态链接符号表(.dyn .sym)/动态链接字符串表(.dyn.str)

动态链接符号表是一个结构体数组,保存了每个函数解析是需要的信息,比如函数名在动态链接字符串表中的偏移等等。动态链接字符串表中保存了函数的名称,并且以\x00作为开始和结尾。

解析过程

解析的过程是比较绕的,我们可以根据一条线索来讨论,这样更加清晰
1. 跳转到.plt
2. 跳转到.got.plt(即上一节提到的GOT表真实的名字,.got是变量的地址,.got.plt是函数的地址)
3. 第一次运行,push index,进入PLT 第一个表项(0号表项),进入解析过程
4. 通过index+ (.rel.plt的地址) 找到Elf32_rel结构,这个结构包括两个内容{r_offset, r_info}
5. 通过Elf32_rel结构的r_info找到 dynsym section中的sym项的索引
6. 通过sym项索引在dynsym section中找到Elf32_sym结构,这个结构体包括多个内容{st_name, st_value, st_size, st_info, st_other},其中st_name为字符串表中该字符串的索引
7. 通过st_name,在dynstr中找到字符串
8. 根据字符串找到目标地址

转载于:https://www.cnblogs.com/rookieDanny/p/8615877.html

ROP_return to dl-resolve学习笔记相关推荐

  1. 5G NR - 下行同步(DL Synchronization)学习笔记5 - SSB是否始终位于BWP之内?

    有同事问,SSB是否始终处在BWP之内(频域)? 如果说的是SSB是否一直处于某个UE的active BWP内,那当然不会,因为SSB中PBCH的B是Broadcast的意思,是小区级的概念,当然不是 ...

  2. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)

    <繁凡的深度学习笔记>前言.目录大纲 (DL笔记整理系列) 一文弄懂深度学习所有基础 ! 3043331995@qq.com https://fanfansann.blog.csdn.ne ...

  3. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)

    好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...

  4. 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

    <繁凡的深度学习笔记>第 2 章 回归问题与神经元模型(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net/ http ...

  5. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  6. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

  7. Spring源码学习笔记:Spring设计模式对比和Spring的OOB,BOP,AOP,IOC,DI/DL

    1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 1.GOF 23总设计模式归纳 分类 设计模式 创建型 工厂方法模式(Factory Method).抽象工厂 ...

  8. 使用DL模型预测台风/雷达回波/降水的datasets构建学习笔记

    基于pytorch的台风降水datasets类构建学习笔记 dl模型花里胡哨一堆,但跑了这么多模型才发现特征工程的重要性,处理好气象数据对于结果还是非常重要的. 在处理气象时空序列问题常采用滑动窗口的 ...

  9. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点

    转载自:http://blog.csdn.net/niuwei22007/article/details/47399913 <CNN基础知识点>From:Convolutional Neu ...

  10. 前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)

    前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs) 一. HTML 1. 盒子模型 是什么:每个元素被表示为一个矩形的盒子,有四个部分组成:内容(content ...

最新文章

  1. 在(CListView)列表视图中添加右键菜单的方法
  2. k2677场效应管参数引脚_场效应管参数大全2.doc
  3. weblogic mime-type
  4. 稳定菜篮子市场供需 农业大健康-林裕豪:从玉农业全力保障
  5. C++类的定义和创建
  6. JVM 晋升到老年代的动态年龄判断
  7. ArcGIS 从大区域提取小区域的行政区shp并用于裁剪其他数据
  8. 验证列数据是否重复方法归类贴
  9. Apalis Imx8qm记录
  10. 微软服务器补丁管理软件,微软IT的补丁管理-MicrosoftDownloadCenter.PDF
  11. 解决微信公共号开发出现 redirect_uri域名与后台配置不一致,错误码10003 错误
  12. cacti监控部署——网络流量监控
  13. [面试题] 从抽屉找东西的概率学问题
  14. Layer Emitter(图层发射器)
  15. java 过滤所有特殊字符
  16. 第一讲:计算机基本结构
  17. java pdfbox 转jpg_java实现PDF转图片的方法
  18. 机器学习中的置信区间与置信度
  19. P1796 汤姆斯的天堂梦(动态规划)
  20. 前端axios下载excel文件(二进制)的处理方法

热门文章

  1. Android 使用Nginx rtmp 模块
  2. SpringBootTest测试类报错:Suppressed: java.lang.IllegalStateException: Unable to find a @SpringBootCon
  3. springboot中添加静态资源的方式,默认的静态资源文件夹有哪些
  4. 写一段jdbc连oracle的程序java类_并实现数据查询_一段Jdbc连Oracle的程序,并实现数据查询....
  5. 金山手机卫士论坛_三星多款手机黑屏系统崩溃 客服:闰4月BUG,无法保证数据不丢失...
  6. 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
  7. 2020-06-24 电子书网站http://www.itjiaocheng.com/mianfei/
  8. GDAL C#读取shp中文属性值乱码问题
  9. 在WinMain中嵌Console窗口
  10. Xna支持中文显示方法归纳