没有合适的资源?快使用搜索试试~ 我知道了~
windows堆溢出原理
4星 · 超过85%的资源 需积分: 33 30 下载量 131 浏览量
2013-03-02
15:24:56
上传
评论
收藏 1.38MB DOC 举报
温馨提示
试读
11页
本来写的一个笔记,经过上机实践,详细介绍了在windows上如何实现堆溢出
资源推荐
资源详情
资源评论
现代操作系统的堆数据结构一般包含两类,堆块和堆表
堆块:
堆区的内存按不同的大小组织成块,以堆块为单位进行标识。一个堆块包含两个部分,
块首和块身:块首是一个堆块的前面几个字节,包含这个堆块的基本信息,例如这个堆块
的大小,占用还是空闲等。块身紧跟在块首后面,是实际分配给用户操作的区域。
堆块实际结构如下所示:
占用态的堆块结构示意图
空闲态堆块结构示意图
从上面 2 个图看到,空闲态的堆块比占用态的堆块在数据区多了 2 个指针,这是用于
再块表中索引挂在这个堆块的前面和后面的堆块用的,一旦这个堆块被占用,这两个指针
区域将填充数据。
堆表:
一般在堆区的起始位置,用于索引堆区的空闲态堆块信息,占用态的堆块由占用它的
程序索引。最重要的两种堆表是:
空闲双向链表(freelist),简称空表
快速单向链表(Lookaside),简称快表
空表的组织方式:堆区一开始的堆表区中有一个 128 项的指针数组,称作空表索引,
该数组的没一项包含两个指针,用于标识一个空表。具体形式如下图。
从上图我们看出空表的组织方式:
1. free[0]中存放的是所有大于等于 1024 字节的堆块。
2. 从 free[1]-free[127]中每个空表存放的是该项索引乘以 8byte 大小的堆块。
快表的组织方式:快表的组织方式和空表类似,也有 128 条,不过每条只能包含 4 个
堆块,并且是单向链表。
剩余10页未读,继续阅读
资源评论
- watchsky0012016-05-29一般般,溢出基本算没讲
- liyufeiat0012014-11-13还不错,对Windows堆分配过程将的比较详细,就是对溢出将的太少了,一段话就带过了
guixh
- 粉丝: 3
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功