windows - Hvordan skal jeg fortolke WinDbg heap verifikationsresultater?

Indlæg af Hanne Mølgaard Plasc

Problem



I WinDbg har jeg udført kommandoen !heap -s -v på syv forskellige heap-korruption-inducerede crash dumps og alle har disse resultater:


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


Hvordan skal jeg fortolke disse resultater?


Jeg fortolker (Seg 00000000026d0000) for at betyde, at WinDbg mener, at det er et segment (\_HEAP\_SEGMENT), men det er faktisk adressen til den store blokbuffer (dette er i overensstemmelse med hvert dump):


+0x2b8 LargeBlocksIndex : 0x00000000`026d0000 Void


Jeg har verificeret, at et dump lavet fra det samme operativsystem og den samme proces ikke udviser nogen problemer med en WinDbg-verifikation, indtil nedbruddet opstår.


Kort sagt, jeg ved ikke, hvorfor WinDbg klager over adressen 26d0000, eller hvorfor det kan tolke det som et segment (hvis det også er det, det gør).


Alle dumper var fra en Windows 2003 R2-maskine. Processen er 64-bit.

Bedste reference


Det viser sig, at det særlige krasj, jeg havde at gøre med, var resultatet af en grænse for mængden af ​​data inde i Windows 2003-hapsegmenterne (~ 106 GiB). Hukommelsen blev for fragmenteret, og programmet kunne ikke finde plads indenfor segmenterne til en tildeling på under 1 MiB i størrelse. Jeg havde oprindeligt regeret dette ud på grund af mængden af ​​fysisk RAM på maskinen (192 GiB) og på grund af grænsen per proces for RAM-brug (8 TiB).


Jeg har endnu ikke fundet årsagen til WinDbgs resultater, men jeg er villig til at se bort fra det som en sandsynlig falsk positiv fra bunken i en inkonsekvent tilstand med de kodeveje, der udføres, når bunken udtømmer segmenthukommelsen.