在WinDbg中,我执行命令!heap -s -v
七个不同的堆腐败引起的崩溃转储和所有有这些结果:我应该如何解释WinDbg堆验证结果?
..................List corrupted: (Blink->Flink = 0000000000000000) != (Block = 00000000026d0010)
HEAP 0000000002030000 (Seg 00000000026d0000) At 00000000026d0000 Error: block list entry corrupted
HEAP 0000000002030000 (Seg 00000000026d0000) At 00000000026d0000 Error: SegmentIndex field corrupted
HEAP 0000000002030000 (Seg 00000000026d0000) At 0000000002749400 Error: invalid block size
我应该如何解释这些结果?
我解释(Seg 00000000026d0000)
意味着WinDbg的认为它是一个段(_HEAP_SEGMENT
),但它实际上是块大缓存的地址(这是符合每个转储):
+0x2b8 LargeBlocksIndex : 0x00000000`026d0000 Void
我已经证实,使用相同的操作系统和相同的进程创建的转储在WinDbg验证发生之前不会出现任何问题。
总之,我不知道为什么WinDbg会抱怨26d0000
的地址,或者为什么它可能会将它解释为段(如果这甚至是它所做的)。
所有转储来自Windows 2003 R2计算机。该过程是64位的。