首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >!heap -p-a VS !heap -x

!heap -p-a VS !heap -x
EN

Stack Overflow用户
提问于 2013-09-10 20:14:20
回答 1查看 2.1K关注 0票数 7

多年来,我一直使用!heap -p-a执行各种任务。现在,我开始使用最新的Win8开发工具包中的WinDbg 6.2.9200在Win8上进行调试。

在这里,我发现!heap -p-a并不总是有效的,而且!address“advertise”使用了!heap -x(如下所示)。

在读完!heap -?之后,我无法理解其中的区别!有人知道其中的区别吗?

您使用哪个命令来查看堆块的详细信息?

代码语言:javascript
复制
0:008> !address 335168f8 
<cut cut>

 Usage:                  Heap
 Base Address:           32b43000
 End Address:            33540000
 Region Size:            009fd000
 State:                  00001000   MEM_COMMIT
 Protect:                00000004   PAGE_READWRITE
 Type:                   00020000   MEM_PRIVATE
 Allocation Base:        32570000
 Allocation Protect:     00000004   PAGE_READWRITE
 More info:              heap owning the address: !heap 0xa80000
 More info:              heap segment
 More info:              heap entry containing the address: !heap -x 0x335168f8


0:008> !heap -x 0x335168f8
Entry     User      Heap      Segment       Size  PrevSize  Unused    Flags
-----------------------------------------------------------------------------
335168f0  335168f8  00a80000  32570000        30        30        1c  busy extra fill 

0:008> !heap -p -a 0x335168f8

0:008> .echo "nothing !!"
nothing !!
EN

回答 1

Stack Overflow用户

发布于 2014-06-20 01:13:59

Windbg使用一种不同的机制来查找堆信息,具体取决于您使用的标志。

-p标志告诉它您已经通过gflags.exe或类似方式启用了Page Heap。启用页面堆后,Windows会保留一组单独的结构(_DPH_HEAP_ROOT和co)来跟踪分配情况。如果PageHeap没有打开,将不会有任何这样的结构,因此您将不会得到任何输出。我还希望-p -a会从地址开始向后搜索,试图找到描述分配的_DPH_HEAP_BLOCK

-x标志告诉Windbg遍历Windows用来跟踪分配的_HEAP/_HEAP_ENTRY结构。这组结构描述了所有经过标准分配器的活动分配(例如,mallocnewLocalAlloc,HeapAlloc`等)。

关于Windows堆分配器的内部原理,有一些很棒的论文。我真的很喜欢Chris Valasek (@nudehaberdasher)几年前在低碎片堆上所做的paper,它是在Windows7中实现的(原则仍然适用于Win8)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18718707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档