PLT表与GOT表和延迟绑定机制以及ret2libc思路

本文解释了动态链接与静态链接的区别,涉及PLT表和GOT表的作用,以及延迟绑定机制。同时介绍了ret2libc攻击思路,即利用已知函数地址找到libc中的system地址用于控制流劫持。
摘要由CSDN通过智能技术生成

关于动态链接和静态链接

打个比方来讲就是我把游戏官方更新公告复制到我的文章,这时候这个复制来的内容属于静态链接,但是我把游戏官网放在这,这时候就属于动态链接了
**,启动
程序设置动态连接的目的是为了让程序运行更快,假如程序全是静态链接,那么这个程序加载就要很久时间,但是是动态连接的话,就可以在需要这个函数的时候再加载它。
#PLT表和GOT表是什么
首先来看一个程序,假如运行到printf函数,它如何在动态链接库里面找到printf函数捏,这时候要用到PLT,链接器这时候会生成一段短的代码来确定printf的位置,所以动态链接每个函数需要俩个东西:


1.存放外部函数地址的数据段


2.有能够对外部函数进行定位的代码


这个存放外部函数的数据段被称为GOT段,存放额外函数的段称为PLT段

运行时有

延迟绑定机制

现在对于gdb调试以及计算机组成原理不太清楚,直接看大佬的图吧(之后补过程)

这个过程大致是xxx@plt->xxx@got->xxx@plt->公共plt->_dl_runtime_resolve

函数_dl_runtime_resolve这里主要作用有执行puts函数和把puts真实地址填入到got表

然后第二次调用

ret2libc思路

当我们遇到libc题就有思路了,我们可以用文件中已经调用过的函数(puts,write等),得到某个函数在got表中真实地址,这时候got表真实地址就是libc里面的地址,我们可以用libcsearcher这个插件或者用libcdata网站找到对应libc版本,得到system地址
(在linux系统下,每个C语言代码转化为可执行文件时系统会自动生成的对应的libc)

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值