Rich (BB code):
MEMORY_MANAGEMENT (1a)
# Any other values for parameter 1 must be individually examined.
Arguments:
Arg1: 0000000000041792, A corrupt PTE has been detected. Parameter 2 contains the address of
the PTE. Parameters 3/4 contain the low/high parts of the PTE.
Arg2: ffffa30132d834c8
Arg3: 1000000000000000
Arg4: 0000000000000000
0x1A hatasının ilk 41792 parametresi, sistemde bozuk bir sayfa tablosu algılandığını söylüyor, bu tipik olarak ONE_BIT dönüşümlerinde ortaya çıkar ama tam olarak bu dosya sırasında oluşmaz. Yani, sistem çok önceden bu dönmeye veya bozulmaya maruz kalmıştır ve o bozulma tam olarak sistemin bu duruma düşmesine şimdi sebep olmuştur.
Rich (BB code):
FAILURE_BUCKET_ID: MEMORY_CORRUPTION_ONE_BIT
Bunu tipik olarak; yığıtlardan, PTE adresinden veya Low'ya da High olan PTE kısımlarından tespitleyebiliriz.
Rich (BB code):
9: kd> KnL
# Child-SP RetAddr Call Site
00 ffffaf0b`53bf7378 fffff802`b06391f6 nt!KeBugCheckEx < Mavi ekran
01 ffffaf0b`53bf7380 fffff802`b06378c7 nt!MiDecommitHandlePageFileFormatPte+0x212 < Belli bir page file dosyasının da silinmesi
02 ffffaf0b`53bf73e0 fffff802`b06366e1 nt!MiDeleteVa+0x197
03 ffffaf0b`53bf7460 fffff802`b0648bce nt!MiDeleteVaDirect+0x2b1
04 ffffaf0b`53bf7580 fffff802`b06489eb nt!MiDeletePagablePteRange+0x1ba
05 ffffaf0b`53bf7840 fffff802`b0cb5d54 nt!MiDeleteVirtualAddresses+0x4b < Bundan öncesi ilgili sanal bellek aralığının silinmesi ile ilgili
06 ffffaf0b`53bf7890 fffff802`b0cb5b15 nt!MiDeleteVad+0x180
07 ffffaf0b`53bf7940 fffff802`b0ca9c4b nt!MiUnmapVad+0x49
08 ffffaf0b`53bf7970 fffff802`b0ca9a8f nt!MiUnmapViewOfSection+0x177
09 ffffaf0b`53bf7a50 fffff802`b0a8d158 nt!NtUnmapViewOfSectionEx+0x9f
0a ffffaf0b`53bf7aa0 00007ffd`a95a32f4 nt!KiSystemServiceCopyEnd+0x28 < Nt kısmına giriş çağrımız
0b 000000de`255ff558 00000000`00000000 0x00007ffd`a95a32f4
Süreç,
NtUnmapViewOfSectionEx ile başlıyor ve bir bölümün adres alanından kaldırılmasını (unmap) sağlıyor. Bu işlem sırasında, bellek yönetimi rutinleri (
MiUnmapVad,
MiDeleteVad,
MiDeleteVirtualAddresses) sayfa tablolarını ve sanal adres aralıklarını temizlerken bir sorunla karşılaşıyor. Özellikle,
MiDecommitHandlePageFileFormatPte aşamasında bir bellek sayfasının serbest bırakılmasında hata oluşmuş ve bu da nihayetinde sistemin bir hata denetimi (
KeBugCheckEx) çağrısıyla durmasına yol açmış.
Bu süreç yalnızca bellek haritalamasını kaldırmaz, aynı zamanda ilgili kaynakların
referans sayısını azaltır. Örneğin, kullanılan fiziksel belleğin veya disk üzerindeki page file alanının artık kullanılmadığını işletim sistemine bildirir. Referans sayısı sıfıra ulaşırsa, kaynak serbest bırakılır. Ancak, bu yığında görüldüğü gibi, bir sayfa serbest bırakılmaya çalışılırken bir hata oluşmuş ve sistem mavi ekrana zorlanmıştır.
Hata, bellek yönetimi yapılarında tutarsızlık olduğunu açıkça gösteriyor. Tipik olarak yanlış bir referans sayısı da PFN_LIST_CORRUPT hatasına itecekti sistemi.
Rich (BB code):
9: kd> !pte ffffa30132d834c8
VA 00000265b0699000
PXE at FFFFA351A8D46020 PPE at FFFFA351A8C04CB0 PDE at FFFFA35180996C18 PTE at FFFFA30132D834C8
contains 0A00000198EA5867 contains 0A000001F57A6867 contains 1A0000022DBDB867 contains 1000000000000000
pfn 198ea5 ---DA--UWEV pfn 1f57a6 ---DA--UWEV pfn 22dbdb ---DA--UWEV not valid
Page has been freed
İlgili PTE'nin Freed yani zaten boşaltılmış olduğu belirtiliyor. Ayrıca bunu da görebiliyoruz
Rich (BB code):
9: kd> .FORMATS 1000000000000000
Evaluate expression:
Hex: 10000000`00000000
Decimal: 1152921504606846976
Decimal (unsigned) : 1152921504606846976
Octal: 0100000000000000000000
Binary: 00010000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Chars: ........
Time: Fri Jun 19 00:21:00.684 5254 (UTC + 3:00)
Float: low 0 high 2.52435e-029
Double: 1.28823e-231
Tek bit hatasını da...
Rich (BB code):
9: kd> dt _RTL_BALANCED_NODE 0xffffffff00000420 < 2
nt!_RTL_BALANCED_NODE
+0x000 Children : [2]
+0x000 Left : ????
+0x008 Right : ????
+0x010 Red : ??
+0x010 Balance : ??
+0x010 ParentValue : ffffffff00000430 < 3
Eşleşmeyen düğümleri de...
Bu süreç, daha çok Chrome'da bir sekmeyi kapatmaya benzer. Yani, bir programın tamamını değil, o programın içinde belirli bir belleği veya bölümü (örneğin, bir dosya veya bir kaynağa bağlı bellek aralığı) işlemin adres alanından kaldırmayı temsil eder.
Örneğin, bir uygulama bir dosyanın içeriğini bellekte bir bölüme (section) haritalamış (map etmiş) olabilir. Bu süreç, bu bölümü "unmap" ederek uygulamanın o dosya içeriğiyle olan bellek bağlantısını keser. Ancak bu işlem uygulamanın tamamını sonlandırmaz; yalnızca o belirli belleğin serbest bırakılması sağlanır.
Bu bir analiz değil açıklamadır, bu sorun tipik olarak RAM hatasının bir ürünüdür.