在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位的。