Sorunun sebebi BlueStacks sürücüsü.

Rich (BB code):
.trap 0xfffffa0f119af230
rax=00000193ab01ca20 rbx=0000000000000000 rcx=0000fffffffff000
rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000000
rip=fffff805382f3239 rsp=fffffa0f119af3c0 rbp=ffffc90195cb9000
 r8=0000000000000001 r9=0000000000053446 r10=0000000000a3e6fc
r11=0000000000000006 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl nz na pe nc
BstkVMMR0_nxt+0xa3239:
fffff805`382f3239 4c8b28 mov r13,qword ptr [rax] ds:00000193`ab01ca20=00090007e189a008
Resetting default scope

Mantıken, Kernel modda çalışan bir sürücü, geçersiz bir adrese erişim yaparsa sistem çöker. Aslında burada geçersiz erişim yaptığı adres içeriği gayet düzgün görünüyor. Bunu ilk baktığımda anlayamamıştım, eşitlediği adres ise tamamen çökmüş ve geçerli bellek alanının da dışına çıkmış, tabir-i caizse 1 bitlik bir dönüşüme maruz kalmıştı. Bu bir donanım hatası sonucudur normalde.


Rich (BB code):
6: kd> !pte 00000193`ab01ca20
                                           VA 00000193ab01ca20
PXE at FFFFFB7DBEDF6018    PPE at FFFFFB7DBEC03270    PDE at FFFFFB7D8064EAC0    PTE at FFFFFB00C9D580E0
contains 0A000007C81B2867  contains 0A000007D3BB3867  contains 0A00000813C38867  contains 8A0000050EA94867
pfn 7c81b2    ---DA--UWEV  pfn 7d3bb3    ---DA--UWEV  pfn 813c38    ---DA--UWEV  pfn 50ea94    ---DA--UW-V

Referans adresi, fiziksel bellek değerleri ve içerikleri temiz. Peki neden çöküyor? Bunu da ancak adresin içeriğini inceleyerek anlayabiliriz.

Rich (BB code):
6: kd> db 00000193`ab01ca20
00000193`ab01ca20  08 a0 89 e1 07 00 09 00-9a 88 01 00 00 00 00 00  ................
00000193`ab01ca30  08 b0 89 e1 07 00 09 00-9b 88 01 00 00 00 00 00  ................
00000193`ab01ca40  08 c0 89 e1 07 00 09 00-9c 88 01 00 00 00 00 00  ................
00000193`ab01ca50  08 d0 89 e1 07 00 09 00-9d 88 01 00 00 00 00 00  ................
00000193`ab01ca60  08 e0 89 e1 07 00 09 00-9e 88 01 00 00 00 00 00  ................
00000193`ab01ca70  08 f0 89 e1 07 00 09 00-9f 88 01 00 00 00 00 00  ................
00000193`ab01ca80  08 00 8a e1 07 00 09 00-a0 88 01 00 00 00 00 00  ................
00000193`ab01ca90  08 10 8a e1 07 00 09 00-a1 88 01 00 00 00 00 00  ................

Little Endian bellek bölgesini incelersen ilgili adresin, = işaretinin hemen yanında olan ve aslında çökmeye sebep olan bellek bölgesini görebilirsin. Şimdi, daha önce IDA ya da X64dbg gibi programlar kullandıysan bir bellek alanını incelerken bellek haritasına bakarak buna benzer hatta aynı bir görsel ile karşılaşabiliyoruz. Bu belleğin ham verilerini içeriyor. Bunu tam olarak daha önce cheat engine kullandıysan anlayacaksın, örneğin bir oyunda bir para değerini CE ile değiştirirken, değiştirdiğin değerin bellek haritasını incelersen tam değiştirdiğin sırada değeri tutan bellek alanındaki ham verilerden birinin değiştiğini görürsün. Çünkü veri aslında oraya yazılıdır ve orada tutulur. Bu bir Windows çökmesi ve 09 - Yani çökmeye sebep olan ham verinin (Bu veri tam da belleği geçerli alandan çıkarıp bit dönüşümüne maruz tutuyor) neyi tuttuğunu ve önceden neye sahip olduğunu belirlemek imkansız gibi bir şey. Sadece şunu söyleyebilirim, BlueStacks sürücüsü Rax içindeki verileri R13'e okurken tam olarak Little Endian kısmındaki 16 bitlik bellek alanının 3.bitinde sistem çöküyor. Bunu yapan hem kernel mode bir sürücü hem de yaptığı sırada sistem IRQL: 2 düzeyinde. Geçersiz bir erişim ile direkt çökecek durumda yani. Bu da oluyor nihayetinde ve mavi ekran ile karşılaşıyorsun. Big Endian kısmı da geçersiz durumda ayrıca zaten. Yani belleği tutan tüm veriler 16 bitlik bellek alanlarına çevirildikleri taktirde geçersiz haldeler.

Rich (BB code):
6: kd> u 0xfff805382f3238
BstkVMMR0_nxt+0xa3239:
fffff805`382f3239 4c8b28          mov     r13,qword ptr [rax] // Çökme
fffff805`382f323c 49b800f0ffffffff0f00 mov r8,0FFFFFFFFFF000h
fffff805`382f3246 4c8d4c2450      lea     r9,[rsp+50h]
fffff805`382f324b 4c23e9          and     r13,rcx
fffff805`382f324e 4c23c7          and     r8,rdi
fffff805`382f3251 488bd0          mov     d1,a1 // rax içeriği, rdx yazmacına yazılıyor.
fffff805`382f3254 488bcb          mov     rcx,rbx
fffff805`382f3257 e804e70000      call    BstkVMMR0_nxt+0xb1960 (fffff805`38301960)
fffff805`382f325c 448ba378120000  mov     r12d,dword ptr [rbx+1278h]
fffff805`382f3263 488d8b80120000  lea     rcx,[rbx+1280h]
fffff805`382f326a 8bf8            mov     edi,eax
fffff805`382f326c c7837812000000000000 mov dword ptr [rbx+1278h],0
fffff805`382f3276 e81518ffff      call    BstkVMMR0_nxt+0x94a90 (fffff805`382e4a90)
fffff805`382f327b 3d6c010000      cmp     eax,16Ch
fffff805`382f3280 7507            jne     BstkVMMR0_nxt+0xa3289 (fffff805`382f3289)  Branch

Bu bellek alanının da doğru olduğunu sonrasını inceleyerek görebiliriz.

Rich (BB code):
6: kd> r rdx
rdx=00000193ab01ca20 // rax değerinin yazıldığının ve referans adresiyle aynı olduğunun kanıtı

Öncesine bakmak elzem olandı ama bu dosyada bulamadım, aslında buldum ama canlı bir döküm olmadığı için de inceleyemedim. Ya BlueStacks sürücüsü o değeri değiştirdi ya da o değer bu dönüşüme maruz kaldı. / Sürücü hatası ya da RAM hatası olabilir.

Tek sefer yaşadıysan sistemi kontrole al ve bir süre daha kontrol et. Eğer sık sık mavi ekran yaşıyorsan RAM'lerini kontrol et.
 
Sorunun sebebi BlueStacks sürücüsü.

Rich (BB code):
.trap 0xfffffa0f119af230.
rax=00000193ab01ca20 rbx=0000000000000000 rcx=0000fffffffff000
rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000000
rip=fffff805382f3239 rsp=fffffa0f119af3c0 rbp=ffffc90195cb9000
 r8=0000000000000001 r9=0000000000053446 r10=0000000000a3e6fc
r11=0000000000000006 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl nz na pe nc.
BstkVMMR0_nxt+0xa3239:
fffff805`382f3239 4c8b28 mov r13,qword ptr [rax] ds:00000193`ab01ca20=00090007e189a008
Resetting default scope.

Mantıken, kernel modda çalışan bir sürücü, geçersiz bir adrese erişim yaparsa sistem çöker. Aslında burada geçersiz erişim yaptığı adres içeriği gayet düzgün görünüyor. Bunu ilk baktığımda anlayamamıştım, eşitlediği adres ise tamamen çökmüş ve geçerli bellek alanının da dışına çıkmış, tabir-i caizse 1 bitlik bir dönüşüme maruz kalmıştı. Bu bir donanım hatası sonucudur normalde.

Rich (BB code):
6: kd> !pte 00000193`ab01ca20
 VA 00000193ab01ca20.
PXE at FFFFFB7DBEDF6018 PPE at FFFFFB7DBEC03270 PDE at FFFFFB7D8064EAC0 PTE at FFFFFB00C9D580E0.
contains 0A000007C81B2867 contains 0A000007D3BB3867 contains 0A00000813C38867 contains 8A0000050EA94867.
pfn 7c81b2 ---DA--UWEV pfn 7d3bb3 ---DA--UWEV pfn 813c38 ---DA--UWEV pfn 50ea94 ---DA--UW-V

Referans adresi, fiziksel bellek değerleri ve içerikleri temiz. Peki neden çöküyor? Bunu da ancak adresin içeriğini inceleyerek anlayabiliriz.

Rich (BB code):
6: kd> db 00000193`ab01ca20
00000193`ab01ca20 08 a0 89 e1 07 00 09 00-9a 88 01 00 00 00 00 00  ................
00000193`ab01ca30 08 b0 89 e1 07 00 09 00-9b 88 01 00 00 00 00 00 ................
00000193`ab01ca40 08 c0 89 e1 07 00 09 00-9c 88 01 00 00 00 00 00 ................
00000193`ab01ca50 08 d0 89 e1 07 00 09 00-9d 88 01 00 00 00 00 00 ................
00000193`ab01ca60 08 e0 89 e1 07 00 09 00-9e 88 01 00 00 00 00 00 ................
00000193`ab01ca70 08 f0 89 e1 07 00 09 00-9f 88 01 00 00 00 00 00 ................
00000193`ab01ca80 08 00 8a e1 07 00 09 00-a0 88 01 00 00 00 00 00 ................
00000193`ab01ca90 08 10 8a e1 07 00 09 00-a1 88 01 00 00 00 00 00 ................

Little endian bellek bölgesini incelersen ilgili adresin, = işaretinin hemen yanında olan ve aslında çökmeye sebep olan bellek bölgesini görebilirsin. Şimdi, daha önce ıda ya da X64dbg gibi programlar kullandıysan bir bellek alanını incelerken bellek haritasına bakarak buna benzer hatta aynı bir görsel ile karşılaşabiliyoruz. Bu belleğin ham verilerini içeriyor. Bunu tam olarak daha önce Cheat Engine kullandıysan anlayacaksın, örneğin bir oyunda bir para değerini CE ile değiştirirken, değiştirdiğin değerin bellek haritasını incelersen tam değiştirdiğin sırada değeri tutan bellek alanındaki ham verilerden birinin değiştiğini görürsün. Çünkü veri aslında oraya yazılıdır ve orada tutulur. Bu bir Windows çökmesi ve 09 - yani çökmeye sebep olan ham verinin (bu veri tam da belleği geçerli alandan çıkarıp bit dönüşümüne maruz tutuyor) neyi tuttuğunu ve önceden neye sahip olduğunu belirlemek imkansız gibi bir şey. Sadece şunu söyleyebilirim, BlueStacks sürücüsü rax içindeki verileri R13'e okurken tam olarak little endian kısmındaki 16 bitlik bellek alanının 3.bitinde sistem çöküyor. Bunu yapan hem kernel mode bir sürücü hem de yaptığı sırada sistem IRQL: 2 düzeyinde. Geçersiz bir erişim ile direkt çökecek durumda yani. Bu da oluyor nihayetinde ve mavi ekran ile karşılaşıyorsun. Big endian kısmı da geçersiz durumda ayrıca zaten. Yani belleği tutan tüm veriler 16 bitlik bellek alanlarına çevirildikleri takdirde geçersiz haldeler.

Rich (BB code):
6: kd> u 0xfff805382f3238.
BstkVMMR0_nxt+0xa3239:
fffff805`382f3239 4c8b28 mov r13,qword ptr [rax] // Çökme
fffff805`382f323c 49b800f0ffffffff0f00 mov r8,0FFFFFFFFFF000h
fffff805`382f3246 4c8d4c2450 lea r9,[rsp+50h]
fffff805`382f324b 4c23e9 and r13,rcx
fffff805`382f324e 4c23c7 and r8,rdi
fffff805`382f3251 488bd0 mov d1,a1 // rax içeriği, rdx yazmacına yazılıyor.
fffff805`382f3254 488bcb mov rcx,rbx
fffff805`382f3257 e804e70000 call BstkVMMR0_nxt+0xb1960 (fffff805`38301960)
fffff805`382f325c 448ba378120000 mov r12d,dword ptr [rbx+1278h]
fffff805`382f3263 488d8b80120000 lea rcx,[rbx+1280h]
fffff805`382f326a 8bf8 mov edi,eax
fffff805`382f326c c7837812000000000000 mov dword ptr [rbx+1278h],0
fffff805`382f3276 e81518ffff call BstkVMMR0_nxt+0x94a90 (fffff805`382e4a90)
fffff805`382f327b 3d6c010000 cmp eax,16Ch
fffff805`382f3280 7507 jne BstkVMMR0_nxt+0xa3289 (fffff805`382f3289) Branch.

Bu bellek alanının da doğru olduğunu sonrasını inceleyerek görebiliriz.

Rich (BB code):
6: kd> r rdx.
rdx=00000193ab01ca20 // rax değerinin yazıldığının ve referans adresiyle aynı olduğunun kanıtı

Öncesine bakmak elzem olandı ama bu dosyada bulamadım, aslında buldum ama canlı bir döküm olmadığı için de inceleyemedim. Ya BlueStacks sürücüsü o değeri değiştirdi ya da o değer bu dönüşüme maruz kaldı. / sürücü hatası ya da RAM hatası olabilir.

Tek sefer yaşadıysan sistemi kontrole al ve bir süre daha kontrol et. Eğer sık sık mavi ekran yaşıyorsan RAM'lerini kontrol et.

Sadece BlueStacks kullanırken bu hatayı alıyorum. Onun dışında bugüne kadar mavi ekran hiç almadım. Aynı sürümü başka bir bilgisayarımda da kullanıyorum ama mavi ekran almış değil şimdiye kadar.