首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pwn基础:PLT&GOT表以及延迟绑定机制

Linux 动态链接 关于动态链接与静态链接,可以打个比方就是:如果我的文章引用了别人的一部分文字,在我发布文章的时候把别人的段落复制到我的文章里面就属于静态连接,而给链接让你们自己去找着看就属于动态链接了...PLT&GOT linux 下的动态链接是通过 PLT&GOT 来实现的,这里做一个实验,通过这个实验来理解 使用如下源代码 test.c: #include void print_banner...可执行文件里面保存的是 PLT 表的地址,对应 PLT 地址指向的是 GOT 的地址,GOT 表指向的就是 glibc 中的地址 那我们可以发现,在这里面想要通过 plt 表获取函数的地址,首先要保证...got 表已经获取了正确的地址,但是在一开始就进行所有函数的重定位是比较麻烦的,为此,linux 引入了延迟绑定机制 延迟绑定 只有动态库函数在被调用时,才会地址解析和重定位工作,为此可以使用类似这样的代码来实现...,plt 表的第一条都是跳转到对应的 got 表项,而 got 表项的内容我们可以通过 gdb 来看一下,如果函数还没有执行的时候,这里的地址是对应 plt 表项的下一条命令,即 push 0x0 (说一下怎么查看

2.6K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PWN 利用mprotect函数进行.got.plt地址段的读取

    mprotect函数详解 在Linux中,mprotect()函数可以用来修改一段指定内存区域的保护属性 函数原型如下: #include #include <sys/mmap.h...mprotect函数的利用 这个函数利用方式为将目标地址:.got.plt或.bss段 修改为可读可写可执行 例题分析 not_the_same_3dsctf_2016 原题链接:https://buuoj.cn...第二个参数需要设置为被修改内存的大小,这里我还没完全弄明白具体要设置多大,这里我设置为0x100 第三个参数需要设置为被修改内存的权限,这里设置为7 = 4 + 2 + 1 (rwx) 也就是读写执行,这里如果不是很理解,可以百度一下Linux...= 0x080EB000 # .got.plt表的起始地址 got_plt_size = 0x100 # 内存长度 got_plt_type = 0x7 # 内存权限,读写执行 def main...) + p32(got_plt_size) + p32(got_plt_type) # mprotect的三个参数 payload += p32(elf.symbols['read']) #

    59510

    一个例子引出的PLTGOT姐妹花

    最近刚刚接触到PLTGOT,所以就想以此篇文章来巩固一下我对于这对姐妹花的理解啦!刚刚接触,理解不深,还请大佬轻喷!...二、代码示例引入 对程序运行有个大致的概念后,我们再利用一个小程序来引入对PLTGOT姐妹花的正式的讲解啦!...存放调用跳转代码的过程表,称为过程链接表(PLT:call跳转PLT表,然后PLT表在call + GOT的绝对地址实现函数的调用)。 如下,为动态链接的一个简要示意图: ?...因此Linux便产生了延迟重定位:也就是当你调用函数的时候函数才开始执行重定位和地址解析工作。...地址,并写到printf@got goto address_good; } 从代码可知,没有重定位时执行printf@plt时,printf@got存放的是下一句的地址,类似于 jmp

    79220

    ROP-ret2libc基础知识

    ROP-ret2libc基础知识 前提知识准备 Linux延时绑定机制 Linux演示绑定机制的实现 延迟绑定对我们有什么意义 libc函数在哪?...ret2libc使用条件 如何使用libc plt表和got表的关系 整体的跟踪 前提知识准备 Linux延时绑定机制 动态连接的程序调用了libc的库函数,但是libc在运行才被加载到内存中,调用libc...Linux演示绑定机制的实现 a、所有程序调用的libc函数都有对应的pltgot表,其位置固定 b、plt表:调用call put@plt plt表中存放的指令:jmp[puts_got] c、...,用于泄露地址 覆盖新地址到got表,劫持函数的流程 plt表: 不用知道libc函数真实地址,使用plt地址就可以调用函数 libc就是linux下的c函数库: libc中包含着各种常用的函数,...表和got表的关系 这个图一定要理解了 每次调试一个函数的时候,我们都会看到一个call puts@plt,它会从plt表中来找一个真实地址,真实地址呢都是在我没的got表中,plt表再去got表来找

    10210

    【胖虎的逆向之路】——GOTPLT Hook详解&针对自定义so库的Hook实操

    /PLT&In Line Hook的相关知识和实际操作,Android Native Hook 的实现方式有很多种,我们接下来要讲的是 GOT/PLT Hook (篇幅略略略长,阅读时长约 20 min...以及数据段 .rel.plt:是对函数引用的修正,它所修正的位置位于.got .plt:程序链接表(Procedure Link Table),外部调用的跳板 .text:为代码段,也是反汇编处理的部分...比如我们看setopt函数这个重定位入口,它的类型为R_AARCH64_JUMP_SL,它的偏移为0x000000066400,它实际上位于.got中 运行命令: arm-linux-androideabi-readelf...中的 curl_a_website 函数的时候,内部会通过BLX相对寻址的方式进入.plt节,计算程序计数器 PC 的当前值跳转进入.got节~ 中间经过经过PLTGOT的跳转,到达我们最终的真实的导入函数的地址...~ 2、更快速的找到目标函数的偏移 前面也提到过动态链接重定位表中的.rel.plt是对函数引用的修正,它所修正的位置位于.got

    97541
    领券