堆溢出利用
来源:互联网 发布:mac 查看所有进程 编辑:程序博客网 时间:2024/06/07 16:18
- 0x00 堆的工作原理
- 0x0 数据结构
- 堆块
- 堆表
- 0x1 申请
- 0x2 使用
- 0x3 释放
- 0x0 数据结构
0x00 堆的工作原理
0x0 数据结构
堆块
堆块包括块首与块身(返回的指针指向),块首是一个堆块头部的几个字节,用来标识这个堆块自身的信息。
未被占用的堆区
被占用的堆区
堆表
位于堆区的起始位置,堆表分为两种空闲双向链表Freelist(空表 128条)和快速单向链表Lookaside(快表 最多只有四项)
堆区一开始的堆表区中有一个128项的指针数组(看到有人说把它看成队列的),被称作空表索引。该数组的每一项包含两个指针,用于表示一条空表。
free[1] 标识了所有堆中所有大小为8字节的空闲堆块,之后每个索引指示的空闲堆块递增8个字节。即:
free[2]标识了16个字节的空闲堆块。
free[k] 标识了 k * 8 个字节的空闲堆块。
空闲双向链表Freelist(空表)
快速单向链表Lookaside(快表)
0x1 申请
堆块的分配有三类:
- 块表分配
- 普通表份分配
- 零号表分配(free[0])
堆的申请首先在快表中查询,如果没有去普通表中查询,如果还没有从内存空间分配。
0x2 使用
直接利用堆表中的指针查询堆块,利用返回的指针使用堆内存,并对其操作。
0x3 释放
堆的释放首先释放在快表中,如果快表满了再释放到普通表中。
空表 内存分布0x00520178 Freelist[0] 0x00520188 Freelist[1]0x00520198 Freelist[2]0x005201a8 Freelist[3]块区0x00520680 h1 (加上8byte头字节)0x00520690 h20x005206a0 h30x005206b0 h4快表 内存分布0x003606E8 Lookaside[1]0x00360718 Lookaside[2]0x00360748 Lookaside[3]0x00360788 Lookaside[4]堆区0x00361E98 h10x00361Ea8 h30x00361E98 h5
0 0
- 堆溢出利用
- 【分析】ptmalloc2的堆溢出利用初探
- 千千静听 med 文件格式堆溢出利用
- Linux堆溢出漏洞利用之unlink
- 堆溢出(DwordShoot)利用SEH异常处理
- 堆溢出
- 总结windows下堆溢出的三种利用方式
- 总结windows下堆溢出的三种利用方式
- 【分析】一种小堆(heap)溢出的另类利用方法
- 总结windows下堆溢出的三种利用方式
- 总结windows下堆溢出的三种利用方式
- 总结windows下堆溢出的三种利用方式
- 一种小堆(heap)溢出的另类利用方法
- 总结windows下堆溢出的三种利用方式
- 总结windows下堆溢出的三种利用方式
- xp下调试堆溢出(下)--利用快表
- JVM进阶(四)——利用MAT排查堆溢出
- JVM进阶(四)——利用MAT排查堆溢出
- MVP架构在Android平台上的实现分析(二)
- SurfaceFlinger
- Centos部署ffmpeg
- 关于PyCharm导入自己写的module时报错:No Module Named XXX的解决方案
- 失败的sparkSql使用问题记录
- 堆溢出利用
- Metronic4.7.5 下载 HTML5 UI后台管理框架
- BZOJ4044: [Cerc2014] Virus synthesis 回文自动机
- 面向对象成员变量和局部变量的区别
- 矩阵——hdu3306 Another kind of Fibonacci
- 数据结构与算法分析 c++11 题2.27 找K是否在N*N 矩阵中
- C语言--从指针到二级指针(下)
- LIS小程序小bug
- 我眼中的csdn