gpt4 book ai didi

windbg - !heap –p –a VS !heap –x

转载 作者:行者123 更新时间:2023-12-04 12:41:29 26 4
gpt4 key购买 nike

多年来,我一直将 !heap –p –a 用于各种任务。
现在我开始使用最新的 Win8 sdk 中的 WinDbg 6.2.9200 在 Win8 上进行调试。

在这里,我发现 !heap –p –a 并不总是有效,并且来自
!address “advertise” 使用 !heap –x (见下文)。

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

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

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 !!

最佳答案

Windbg 使用不同的机制来查找堆信息,具体取决于您使用的标志。
-p标志告诉它您已启用 Page Heap通过 gflags.exe或类似。启用页堆时,Windows 保留一组单独的结构(_DPH_HEAP_ROOT 和 co)用于跟踪分配。如果 PageHeap 没有打开,就不会有任何这样的结构,所以你不会得到任何输出。我也希望 -p -a只会从地址向后搜索以尝试找到 _DPH_HEAP_BLOCK它描述了分配。
-x flag 告诉 Windbg 走 _HEAP/_HEAP_ENTRY Windows 用于跟踪分配的结构。这组结构描述了通过标准分配器的所有事件分配(例如, mallocnewLocalAlloc, HeapAlloc` 等)。

有几篇关于 Windows 堆分配器内部结构的优秀论文。我真的很喜欢paper Chris Valasek ( @nudehaberdasher ) 几年前在 Windows 7 中实现的低碎片堆上做了(并且这些原则仍然适用于 Win8)。

关于windbg - !heap –p –a VS !heap –x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18718707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com