ROP_return to dl-resolve学习笔记
转自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学习笔记相关推荐
- 5G NR - 下行同步(DL Synchronization)学习笔记5 - SSB是否始终位于BWP之内?
有同事问,SSB是否始终处在BWP之内(频域)? 如果说的是SSB是否一直处于某个UE的active BWP内,那当然不会,因为SSB中PBCH的B是Broadcast的意思,是小区级的概念,当然不是 ...
- 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)
<繁凡的深度学习笔记>前言.目录大纲 (DL笔记整理系列) 一文弄懂深度学习所有基础 ! 3043331995@qq.com https://fanfansann.blog.csdn.ne ...
- 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)
好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...
- 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)
<繁凡的深度学习笔记>第 2 章 回归问题与神经元模型(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net/ http ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR
原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression python源代码(GitHub下载 CSDN免费下载) ...
- Spring源码学习笔记:Spring设计模式对比和Spring的OOB,BOP,AOP,IOC,DI/DL
1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 1.GOF 23总设计模式归纳 分类 设计模式 创建型 工厂方法模式(Factory Method).抽象工厂 ...
- 使用DL模型预测台风/雷达回波/降水的datasets构建学习笔记
基于pytorch的台风降水datasets类构建学习笔记 dl模型花里胡哨一堆,但跑了这么多模型才发现特征工程的重要性,处理好气象数据对于结果还是非常重要的. 在处理气象时空序列问题常采用滑动窗口的 ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点
转载自:http://blog.csdn.net/niuwei22007/article/details/47399913 <CNN基础知识点>From:Convolutional Neu ...
- 前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)
前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs) 一. HTML 1. 盒子模型 是什么:每个元素被表示为一个矩形的盒子,有四个部分组成:内容(content ...
最新文章
- 在(CListView)列表视图中添加右键菜单的方法
- k2677场效应管参数引脚_场效应管参数大全2.doc
- weblogic mime-type
- 稳定菜篮子市场供需 农业大健康-林裕豪:从玉农业全力保障
- C++类的定义和创建
- JVM 晋升到老年代的动态年龄判断
- ArcGIS 从大区域提取小区域的行政区shp并用于裁剪其他数据
- 验证列数据是否重复方法归类贴
- Apalis Imx8qm记录
- 微软服务器补丁管理软件,微软IT的补丁管理-MicrosoftDownloadCenter.PDF
- 解决微信公共号开发出现 redirect_uri域名与后台配置不一致,错误码10003 错误
- cacti监控部署——网络流量监控
- [面试题] 从抽屉找东西的概率学问题
- Layer Emitter(图层发射器)
- java 过滤所有特殊字符
- 第一讲:计算机基本结构
- java pdfbox 转jpg_java实现PDF转图片的方法
- 机器学习中的置信区间与置信度
- P1796 汤姆斯的天堂梦(动态规划)
- 前端axios下载excel文件(二进制)的处理方法
热门文章
- Android 使用Nginx rtmp 模块
- SpringBootTest测试类报错:Suppressed: java.lang.IllegalStateException: Unable to find a @SpringBootCon
- springboot中添加静态资源的方式,默认的静态资源文件夹有哪些
- 写一段jdbc连oracle的程序java类_并实现数据查询_一段Jdbc连Oracle的程序,并实现数据查询....
- 金山手机卫士论坛_三星多款手机黑屏系统崩溃 客服:闰4月BUG,无法保证数据不丢失...
- 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
- 2020-06-24 电子书网站http://www.itjiaocheng.com/mianfei/
- GDAL C#读取shp中文属性值乱码问题
- 在WinMain中嵌Console窗口
- Xna支持中文显示方法归纳