windows 堆的数据结构及管理策略
摘 要: 详细讲解windows堆的数据结构及管理策略及常见堆破坏问题
关键词: 前堆 后堆 堆分配 堆释放 堆合并 堆调试
一、引言
最近常看到有人问堆栈的区别是什么?那个在分配内存的效率高?为什么?另外在学习exploit的时候堆栈内部实现原理也是基础。故总结此文,以便日后学习。
二、堆简介
堆是一种内存的管理器,c++中用new/delete,c中用malloc/free函数来分配和释放内存。当我们无法预知所需要的内存的大小的时候,所需要的内存无法在栈中得到满足的时候,我们都要使用到堆。初堆可以实现动态内存的分配与释放外,c运行时,虚拟内存管理器及其他形式的私有内存管理器也可以。但他们的根本都是windows虚拟内存管理器。
当一个进程启动的时候会有默认的进程堆被动态的创建,虽有一些进程使用这个默认的进程堆但是大多数使用的还是C运行时堆(new /delete malloc/free等)来满足对内存的需要。
windows的堆管理器可以进一步划分为前堆和后堆分配器。具体见堆的分配。
三、堆栈的区别
四、堆分配
五、堆释放
六、堆合并
七、堆调试
八、常见的堆破坏
九、堆溢出的利用
十、总结
十一、参考资料
[1]. Oday 安全:软件分析技术 电子工业出版社出版 failwest编著
[2].Advanced Windows Debugging 聂雪军 等译