Xp heap

windbg 调试来看XpSp3 heap

基本概念

一个进程能有多个堆,+0x58指向堆中的第一个堆段,C++一般用HeapCreate创建,每个堆至少有一个堆段
堆段 一个堆最多有64个堆段,+0x20(FirstEntry)指向堆段中的第一个堆块,C++一般用HeapAlloc创建
堆块 实际的堆内存使用
关于堆的实际分配使用
堆管理器通过Windows虚拟内存管理器分配一大块内存(堆段),这块内存将被分为大小不同的堆块来满足实际的分配。 当一个堆段耗尽所有空间后,堆管理器将创建另一个新的堆段。

堆管理流程

堆管理包括前端堆管理和核心堆层管理两个部分,前端堆管理 主要用于快速的堆块分配以及被释放的堆块的重利用,因此在申请一个堆块的时候,会首先查询前端堆部分有没有可用的堆块,当没有的之后才会去查看核心堆管理。
前端堆管理 包括Lookaside list(快表),低碎片堆。

申请堆块 申请一个堆块,首先查看快表中是否有合适的堆块,若有则分配,若没有则继续查看freelist中是否有合适的堆块,若没有则正常划分一个空堆块分配。

priority queue search rop gadgets
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×