Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Iwlenglish

Başarılı
Katılım
14 Ocak 2024
Mesajlar
57
Çözümler
2
Beğeniler
16
  • Anakart: MSI Pro H610M-E DDR4 Intel H610 Soket 1700 3200 MHz
  • İşlemci: Intel Core i5 13400F Soket 1700 13.Nesil
  • Ekran Kartı: Gigabyte GeForce RTX 4060 Ti Gaming OC 8G
  • İşletim Sistemi: Windows 10 Pro Version 22H2 19045.4291

Bu hafta içi 2 kez aldığım mavi ekran. Alt sekmede tarayıcı açıkken VALORANT açtığımda yedim ikisini de.

İlk yediğim mavi ekran hatası:

Kod:
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: fffffffffffffff1, memory referenced.
Arg2: 0000000000000002, X64: bit 0 set if the fault was due to a not-present PTE.
bit 1 is set if the fault was due to a write, clear if a read.
bit 3 is set if the processor decided the fault was due to a corrupted PTE.
bit 4 is set if the fault was due to attempted execute of a no-execute PTE.
- ARM64: bit 1 is set if the fault was due to a write, clear if a read.
bit 3 is set if the fault was due to attempted execute of a no-execute PTE.
Arg3: fffff80561e3d894, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 0000000000000002, (reserved)

Debugging Details:
------------------


KEY_VALUES_STRING: 1

Key : AV.Type
Value: Write

Key : Analysis.CPU.mSec
Value: 2874

Key : Analysis.Elapsed.mSec
Value: 20304

Key : Analysis.IO.Other.Mb
Value: 0

Key : Analysis.IO.Read.Mb
Value: 0

Key : Analysis.IO.Write.Mb
Value: 1

Key : Analysis.Init.CPU.mSec
Value: 359

Key : Analysis.Init.Elapsed.mSec
Value: 31044

Key : Analysis.Memory.CommitPeak.Mb
Value: 97

Key : Bugcheck.Code.LegacyAPI
Value: 0x50

Key : Bugcheck.Code.TargetModel
Value: 0x50

Key : Failure.Bucket
Value: AV_W_(null)_vgk!unknown_function

Key : Failure.Hash
Value: {b500642a-4aff-1600-0a33-0c3da97a2931}

Key : WER.OS.Branch
Value: vb_release

Key : WER.OS.Version
Value: 10.0.19041.1


BUGCHECK_CODE: 50

BUGCHECK_P1: fffffffffffffff1

BUGCHECK_P2: 2

BUGCHECK_P3: fffff80561e3d894

BUGCHECK_P4: 2

FILE_IN_CAB: 042824-8890-01.dmp

READ_ADDRESS: fffff805628fb390: Unable to get MiVisibleState
Unable to get NonPagedPoolStart
Unable to get NonPagedPoolEnd
Unable to get PagedPoolStart
Unable to get PagedPoolEnd
unable to get nt!MmSpecialPagesInUse
fffffffffffffff1

MM_INTERNAL_CODE: 2

BLACKBOXBSD: 1 (!blackboxbsd)


BLACKBOXNTFS: 1 (!blackboxntfs)


BLACKBOXPNP: 1 (!blackboxpnp)


BLACKBOXWINLOGON: 1

CUSTOMER_CRASH_COUNT: 1

PROCESS_NAME: System

TRAP_FRAME: fffff48133967110 -- (.trap 0xfffff48133967110)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=0000000000000000 rbx=0000000000000000 rcx=0000000000000021
rdx=0000000000000001 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80561e3d894 rsp=fffff481339672a0 rbp=fffff48133967300
r8=fffff80583cb0000 r9=fffff48133967360 r10=00000000000000a0
r11=0840542143711081 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!ObfReferenceObject+0x24:
fffff805`61e3d894 f0480fc15ed0 lock xadd qword ptr [rsi-30h],rbx ds:ffffffff`ffffffd0=????????????????
Resetting default scope

STACK_TEXT:
fffff481`33966e68 fffff805`620390db : 00000000`00000050 ffffffff`fffffff1 00000000`00000002 fffff481`33967110 : nt!KeBugCheckEx
fffff481`33966e70 fffff805`61e1c2a0 : 76ff9fbf`d9cff7d7 00000000`00000002 fffff481`33967190 00000000`00000000 : nt!MiSystemFault+0x1de02b
fffff481`33966f70 fffff805`6200db29 : 00000b7e`cc69877f fffff481`33967480 00000000`00000000 d649ae30`c740d604 : nt!MmAccessFault+0x400
fffff481`33967110 fffff805`61e3d894 : fffff805`83d361b8 fffff805`61e3d76e fffff805`83d361c8 fffff805`83d361b8 : nt!KiPageFault+0x369
fffff481`339672a0 fffff805`83cddb95 : fffff805`83d361c8 fffff805`83d361c0 00000000`00000000 00000000`00000000 : nt!ObfReferenceObject+0x24
fffff481`339672e0 fffff805`83d361c8 : fffff805`83d361c0 00000000`00000000 00000000`00000000 fffff805`83cb0000 : vgk+0x2db95
fffff481`339672e8 fffff805`83d361c0 : 00000000`00000000 00000000`00000000 fffff805`83cb0000 fffff481`33967390 : vgk+0x861c8
fffff481`339672f0 00000000`00000000 : 00000000`00000000 fffff805`83cb0000 fffff481`33967390 00000000`00000001 : vgk+0x861c0


SYMBOL_NAME: vgk+2db95

MODULE_NAME: vgk

IMAGE_NAME: vgk.sys

STACK_COMMAND: .cxr; .ecxr ; kb

BUCKET_ID_FUNC_OFFSET: 2db95

FAILURE_BUCKET_ID: AV_W_(null)_vgk!unknown_function

OS_VERSION: 10.0.19041.1

BUILDLAB_STR: vb_release

OSPLATFORM_TYPE: x64

OSNAME: Windows 10

FAILURE_ID_HASH: {b500642a-4aff-1600-0a33-0c3da97a2931}

Followup: MachineOwner
---------



Bugcheck Analysis

PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: fffffffffffffff2, memory referenced.
Arg2: 0000000000000002, X64: bit 0 set if the fault was due to a not-present PTE.
bit 1 is set if the fault was due to a write, clear if a read.
bit 3 is set if the processor decided the fault was due to a corrupted PTE.
bit 4 is set if the fault was due to attempted execute of a no-execute PTE.
- ARM64: bit 1 is set if the fault was due to a write, clear if a read.
bit 3 is set if the fault was due to attempted execute of a no-execute PTE.
Arg3: fffff8074c63d894, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 0000000000000002, (reserved)

Debugging Details:
------------------


KEY_VALUES_STRING: 1

Key : AV.Type
Value: Write

Key : Analysis.CPU.mSec
Value: 2062

Key : Analysis.Elapsed.mSec
Value: 8711

Key : Analysis.IO.Other.Mb
Value: 12

Key : Analysis.IO.Read.Mb
Value: 0

Key : Analysis.IO.Write.Mb
Value: 19

Key : Analysis.Init.CPU.mSec
Value: 1077

Key : Analysis.Init.Elapsed.mSec
Value: 60073

Key : Analysis.Memory.CommitPeak.Mb
Value: 91

Key : Bugcheck.Code.LegacyAPI
Value: 0x50

Key : Bugcheck.Code.TargetModel
Value: 0x50

Key : Failure.Bucket
Value: AV_W_(null)_vgk!unknown_function

Key : Failure.Hash
Value: {b500642a-4aff-1600-0a33-0c3da97a2931}

Key : WER.OS.Branch
Value: vb_release

Key : WER.OS.Version
Value: 10.0.19041.1


BUGCHECK_CODE: 50

BUGCHECK_P1: fffffffffffffff2

BUGCHECK_P2: 2

BUGCHECK_P3: fffff8074c63d894

BUGCHECK_P4: 2

FILE_IN_CAB: 042924-9796-01.dmp

READ_ADDRESS: fffff8074d0fb390: Unable to get MiVisibleState
Unable to get NonPagedPoolStart
Unable to get NonPagedPoolEnd
Unable to get PagedPoolStart
Unable to get PagedPoolEnd
unable to get nt!MmSpecialPagesInUse
fffffffffffffff2

MM_INTERNAL_CODE: 2

BLACKBOXBSD: 1 (!blackboxbsd)


BLACKBOXNTFS: 1 (!blackboxntfs)


BLACKBOXPNP: 1 (!blackboxpnp)


BLACKBOXWINLOGON: 1

CUSTOMER_CRASH_COUNT: 1

PROCESS_NAME: System

TRAP_FRAME: ffffe18c6b967110 -- (.trap 0xffffe18c6b967110)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=0000000000000000 rbx=0000000000000000 rcx=0000000000000022
rdx=0000000000000001 rsi=0000000000000000 rdi=0000000000000000
rip=fffff8074c63d894 rsp=ffffe18c6b9672a0 rbp=ffffe18c6b967300
r8=fffff8076b5e0000 r9=ffffe18c6b967360 r10=00000000000000a0
r11=084054214b701081 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!ObfReferenceObject+0x24:
fffff807`4c63d894 f0480fc15ed0 lock xadd qword ptr [rsi-30h],rbx ds:ffffffff`ffffffd0=????????????????
Resetting default scope

STACK_TEXT:
ffffe18c`6b966e68 fffff807`4c8390db : 00000000`00000050 ffffffff`fffffff2 00000000`00000002 ffffe18c`6b967110 : nt!KeBugCheckEx
ffffe18c`6b966e70 fffff807`4c61c2a0 : 76ff9fbf`d9cff7d7 00000000`00000002 ffffe18c`6b967190 00000000`00000000 : nt!MiSystemFault+0x1de02b
ffffe18c`6b966f70 fffff807`4c80db29 : 00001e73`9469877f ffffe18c`6b967480 00000000`00000000 d649ae30`c740d604 : nt!MmAccessFault+0x400
ffffe18c`6b967110 fffff807`4c63d894 : fffff807`6b6661b8 fffff807`4c63d76e fffff807`6b6661d0 fffff807`6b6661b8 : nt!KiPageFault+0x369
ffffe18c`6b9672a0 fffff807`6b60db95 : fffff807`6b6661d0 fffff807`6b6661c0 00000000`00000000 00000000`00000000 : nt!ObfReferenceObject+0x24
ffffe18c`6b9672e0 fffff807`6b6661d0 : fffff807`6b6661c0 00000000`00000000 00000000`00000000 fffff807`6b5e0000 : vgk+0x2db95
ffffe18c`6b9672e8 fffff807`6b6661c0 : 00000000`00000000 00000000`00000000 fffff807`6b5e0000 ffffe18c`6b967390 : vgk+0x861d0
ffffe18c`6b9672f0 00000000`00000000 : 00000000`00000000 fffff807`6b5e0000 ffffe18c`6b967390 00000000`00000001 : vgk+0x861c0


SYMBOL_NAME: vgk+2db95

MODULE_NAME: vgk

IMAGE_NAME: vgk.sys

STACK_COMMAND: .cxr; .ecxr ; kb

BUCKET_ID_FUNC_OFFSET: 2db95

FAILURE_BUCKET_ID: AV_W_(null)_vgk!unknown_function

OS_VERSION: 10.0.19041.1

BUILDLAB_STR: vb_release

OSPLATFORM_TYPE: x64

OSNAME: Windows 10

FAILURE_ID_HASH: {b500642a-4aff-1600-0a33-0c3da97a2931}

Followup: MachineOwner
---------
 
Son düzenleyen: Moderatör:
Vanguard son sıralar çok mavi ekran yaratıyor, bu durum genel. İstersen dosyalarını rehberdeki gibi paylaş yine de bakalım:

 
Aldığın hatanın sebebi aslında hata başlığında yazıyor:

Kod:
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: fffffffffffffff2, memory referenced.
Arg2: 0000000000000002, X64: bit 0 set if the fault was due to a not-present PTE.
 bit 1 is set if the fault was due to a write, clear if a read.
 bit 3 is set if the processor decided the fault was due to a corrupted PTE.
 bit 4 is set if the fault was due to attempted execute of a no-execute PTE.
 - ARM64: bit 1 is set if the fault was due to a write, clear if a read.
 bit 3 is set if the fault was due to attempted execute of a no-execute PTE.
Arg3: fffff8074c63d894, If non-zero, the instruction address which referenced the bad memory
 address.
Arg4: 0000000000000002, (reserved)

Görüldüğü gibi, geçersiz sistem belleğine başvurulması ile hata kodu oluşuyor. Soruna sebep olan şey; ya uygulama direkt olarak geçersiz sistem belleğine başvurdu ya da onun erişmesi yasaklanan, başka bir uygulamanın kullanması için ayrılan sistem belleğine erişmeye çalıştı. Bunu anlamanın yolu, referans verilen adresin sayfa tablosuna bakmak olacaktır.

Kod:
TRAP_FRAME: ffffe18c6b967110 -- (.trap 0xffffe18c6b967110)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=0000000000000000 rbx=0000000000000000 rcx=0000000000000022
rdx=0000000000000001 rsi=0000000000000000 rdi=0000000000000000
rip=fffff8074c63d894 rsp=ffffe18c6b9672a0 rbp=ffffe18c6b967300
 r8=fffff8076b5e0000 r9=ffffe18c6b967360 r10=00000000000000a0
r11=084054214b701081 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!ObfReferenceObject+0x24:
fffff807`4c63d894 f0480fc15ed0 lock xadd qword ptr [rsi-30h],rbx ds:ffffffff`ffffffd0=????????????????
Resetting default scope

Erişilmeye çalışılan adres ffffffff`ffffffd0. Ayrıca fark edersen çökme nt!ObfReferenceObject+0x24 çağrısı sırasında oluşmuş. Hatanın bununla alakası yok, prosedüre uygun bir çağrı fakat kısaca bahsetmek gerekirse; bu çağrı, fark edersen Vanguard çağrılarından sonra sisteme girilmiş. Çağrının amacı, nesne bir adrese referans veriyor ve referans verme sayısı 0'a düşmesin diye gönderiliyor ki sistem çökmesi engellenebilsin. Normal olarak uygulamanın işi bittiği zaman, serbest bırakılmalı ve bunun için ise ObDereferenceObject çağrısı gelmeliydi.

Fakat bundan önce uygulama - hele ki bu uygulama kernel düzeyde çalışıyorsa - geçersiz sistem belleğine başvuruyor, sayfa hatası ve kaçınılmaz bir sistem çökmesi yaşanıyor.

Kod:
14: kd> !pte ffffffff`ffffffd0
 VA ffffffffffffffd0
PXE at FFFFF77BBDDEEFF8 PPE at FFFFF77BBDDFFFF8 PDE at FFFFF77BBFFFFFF8 PTE at FFFFF77FFFFFFFF8
contains 0000000005FBA063 contains 0000000005FBB063 contains 0000000005FBD063 contains 0000FFFFFFFFF000
pfn 5fba ---DA--KWEV pfn 5fbb ---DA--KWEV pfn 5fbd ---DA--KWEV not valid
 Page has been freed

Evet geçersiz bir sistem belleğine erişilmeye çalışılmış fakat üstte gördüğün gibi "freed" yani başka uygulamanın kullanması için serbest bırakılmış bir adrese erişilmiş. Bundan kaynaklı da hata oluşmuş.

Erişmeye çalışan uygulama Vanguard. Dump içerisinde daha fazla hata bulunabilirdi fakat gerek yok diye düşünüyorum. Her şey açık zaten.

Bu hata, şu sıralar Reddit'te geziniyor. Yeni güncellemeye kadar Vanguard kullanmamak dışında spesifik bir çözüm yolu yok.
 
Uzun uzun asla anlatılacak bir şey yok bu konuda, sadece yanlış bilgilendirmeyi düzeltmek lazım.

nt!ObfReferenceObject+0x24 işlevinin tam olarak ne olduğunu bilmek ve kopyala yapıştır yapmamak gerekiyor. Çünkü ortaya yanlış bir ifade çıkıyor.

Microsoft'un bahsettiği şey aslında;

Bu rutinin, dosyalar, işlemler ve senkronizasyon ilkelleri gibi nesnelerin ömrünü yönetmek için çok önemli olduğu. Bir sürücü veya sistem bileşeni bir nesneye referans verdiğinde, erken ayırmayı önlemek için referans sayısı artırılır, bu kadar yani. “ObfReferenceObject” referans sayısını artırarak bu süreçte önemli bir rol oynuyor. Yani;

Bir nesnenin referans sayısının artırılması, sistemin o anda o nesneyi kaç varlığın kullandığını veya referans verdiğini takip ettiği anlamına gelir. Bu sayı, referanslar olduğu sürece nesnenin serbest bırakılmasını veya bellekten kaldırılmasını önlüyor.

Bir programın birden fazla parçasının erişmesi gereken bir dosya veya bellek gibi paylaşılan bir kaynağın olduğunu düşün. Programın bir bileşeni bu kaynağı her kullanmaya başladığında, referans sayısını artırır. Kaynakla işi bittiğinde, sayımı azaltır. Sayım sıfıra ulaşırsa, programın hiçbir bölümünün o anda kaynağı kullanmadığını gösterir, bellekten güvenli bir şekilde ayrılabilir.

Temelde, referans sayısını artırmak, bir nesnenin sistemin bir parçası tarafından aktif olarak kullanıldığı sürece bellekte kalmasını sağlar. Bu, sistemin diğer bölümleri hala nesneye bağlıysa hatalara veya çökmelere yol açabilecek erken ayırma işlemini önler. Yani 0 olması çökmesi veya sayfa hatası oluşturması demek değil.

Örnek vereyim:

“Vanguard ”ın bir uygulama içindeki hassas verilere erişimi yönetmekten sorumlu bir güvenlik modülü olduğu aşikar yani;

- Uygulama başladığında, Vanguard modülü başlatılır ve belleğe yüklenir. Bu noktada, uygulama artık onu kullandığı için referans sayısı bire yükseltilir.

Örneğin, uygulamanın Vanguard kullanarak kullanıcı izinlerini kontrol etmesi gereken üç farklı bölümü olduğunu varsayalım:
  1. Bir güvenlik kontrolüne başladığında, A diyelim buna; Vanguard'ın referans sayısını birden ikiye çıkarır.
  2. Eş zamanlı olarak B Bileşeni başka bir güvenlik kontrolü başlatarak referans sayısını üçe çıkarır.
  3. Daha sonra Bileşen C de bir güvenlik işlemi için Vanguard'ı kullanır ve referans sayısını dörde çıkarır.
A Bileşeni işlemini tamamlarsa, referans sayısını dörtten üçe düşürür.
Benzer şekilde, B ve C bileşenleri de işlemlerini tamamladıklarında referans sayısını azaltarak sırasıyla önce ikiye sonra da bire düşürürler.

Sonunda, uygulama kapandığında veya artık Vanguard'a ihtiyaç duymadığında, referans sayısı sıfıra düşer. Bu noktada, sistem Vanguard modülü tarafından işgal edilen belleği güvenli bir şekilde ayırarak kaynakları diğer görevler için serbest bırakabilir.

Kod:
rax=0000000000000000 rbx=fffff8076b6661d0 rcx=0000000000000022
rdx=0000000000000001 rsi=fffff8076b6661c0 rdi=fffff8076b6661c0
rip=fffff8076b6661c0 rsp=ffffe18c6b9672f0 rbp=ffffe18c6b967300
 r8=fffff8076b5e0000  r9=ffffe18c6b967360 r10=00000000000000a0
r11=084054214b701081 r12=0000000000000020 r13=0000000000000008
r14=0000000000000022 r15=fffff8076b5e0000
iopl=0         nv up ei pl zr na po nc
cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00040246
vgk+:
fffff807`6b6661c0 2200            and     al,byte ptr [rax] ds:002b:00000000`00000000=??

Vanguard zaten çoktan null bir adrese referansını atıp çökmüş zaten. Bu yukarıda bahsedilen şeye göre sistemin kendi işlevinin sistemi çökertmesi lazım ama öyle bir şey kesinlike yok :)

Bu hatayı yıllar önce NVIDIA sürücülerinde görmüştüm. O da genel bir hataydı ve fixlendi.


Bu referans sayma işlemleri falan sistem özellikleridir. Karıştırılmasın :

 
Uzun uzun asla anlatılacak bir şey yok bu konuda, sadece yanlış bilgilendirmeyi düzeltmek lazım.

nt!ObfReferenceObject+0x24 işlevinin tam olarak ne olduğunu bilmek ve kopyala yapıştır yapmamak gerekiyor. Çünkü ortaya yanlış bir ifade çıkıyor.

Microsoft'un bahsettiği şey aslında;

Bu rutinin, dosyalar, işlemler ve senkronizasyon ilkelleri gibi nesnelerin ömrünü yönetmek için çok önemli olduğu. Bir sürücü veya sistem bileşeni bir nesneye referans verdiğinde, erken ayırmayı önlemek için referans sayısı artırılır, bu kadar yani. “ObfReferenceObject” referans sayısını artırarak bu süreçte önemli bir rol oynuyor. Yani;

Bir nesnenin referans sayısının artırılması, sistemin o anda o nesneyi kaç varlığın kullandığını veya referans verdiğini takip ettiği anlamına gelir. Bu sayı, referanslar olduğu sürece nesnenin serbest bırakılmasını veya bellekten kaldırılmasını önlüyor.

Bir programın birden fazla parçasının erişmesi gereken bir dosya veya bellek gibi paylaşılan bir kaynağın olduğunu düşün. Programın bir bileşeni bu kaynağı her kullanmaya başladığında, referans sayısını artırır. Kaynakla işi bittiğinde, sayımı azaltır. Sayım sıfıra ulaşırsa, programın hiçbir bölümünün o anda kaynağı kullanmadığını gösterir, bellekten güvenli bir şekilde ayrılabilir.

Temelde, referans sayısını artırmak, bir nesnenin sistemin bir parçası tarafından aktif olarak kullanıldığı sürece bellekte kalmasını sağlar. Bu, sistemin diğer bölümleri hala nesneye bağlıysa hatalara veya çökmelere yol açabilecek erken ayırma işlemini önler. Yani 0 olması çökmesi veya sayfa hatası oluşturması demek değil.

Örnek vereyim:

“Vanguard ”ın bir uygulama içindeki hassas verilere erişimi yönetmekten sorumlu bir güvenlik modülü olduğu aşikar yani;

- Uygulama başladığında, Vanguard modülü başlatılır ve belleğe yüklenir. Bu noktada, uygulama artık onu kullandığı için referans sayısı bire yükseltilir.

Örneğin, uygulamanın Vanguard kullanarak kullanıcı izinlerini kontrol etmesi gereken üç farklı bölümü olduğunu varsayalım:
  1. Bir güvenlik kontrolüne başladığında, A diyelim buna; Vanguard'ın referans sayısını birden ikiye çıkarır.
  2. Eş zamanlı olarak B Bileşeni başka bir güvenlik kontrolü başlatarak referans sayısını üçe çıkarır.
  3. Daha sonra Bileşen C de bir güvenlik işlemi için Vanguard'ı kullanır ve referans sayısını dörde çıkarır.
A Bileşeni işlemini tamamlarsa, referans sayısını dörtten üçe düşürür.
Benzer şekilde, B ve C bileşenleri de işlemlerini tamamladıklarında referans sayısını azaltarak sırasıyla önce ikiye sonra da bire düşürürler.

Sonunda, uygulama kapandığında veya artık Vanguard'a ihtiyaç duymadığında, referans sayısı sıfıra düşer. Bu noktada, sistem Vanguard modülü tarafından işgal edilen belleği güvenli bir şekilde ayırarak kaynakları diğer görevler için serbest bırakabilir.

Kod:
rax=0000000000000000 rbx=fffff8076b6661d0 rcx=0000000000000022
rdx=0000000000000001 rsi=fffff8076b6661c0 rdi=fffff8076b6661c0
rip=fffff8076b6661c0 rsp=ffffe18c6b9672f0 rbp=ffffe18c6b967300
 r8=fffff8076b5e0000 r9=ffffe18c6b967360 r10=00000000000000a0
r11=084054214b701081 r12=0000000000000020 r13=0000000000000008
r14=0000000000000022 r15=fffff8076b5e0000
iopl=0 nv up ei pl zr na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00040246
vgk+:
fffff807`6b6661c0 2200 and al,byte ptr [rax] ds:002b:00000000`00000000=??

Vanguard zaten çoktan null bir adrese referansını atıp çökmüş zaten. Bu yukarıda bahsedilen şeye göre sistemin kendi işlevinin sistemi çökertmesi lazım ama öyle bir şey kesinlike yok :)

Bu hatayı yıllar önce NVIDIA sürücülerinde görmüştüm. O da genel bir hataydı ve fixlendi.


Bu referans sayma işlemleri falan sistem özellikleridir. Karıştırılmasın:

Çökmenin zaten geçersiz belleğe erişim sonucu olduğunu yazmıştım. Sadece var olan durumda küçük bir tahmin yapmıştım. Yani demek istediğimin çökme ile alakası yok. Karışma olmuş sadece. Kıymetli bilgilerin için teşekkür ederim.

Vanguard zaten çoktan null bir adrese referansını atıp çökmüş zaten. Bu yukarıda bahsedilen şeye göre sistemin kendi işlevinin sistemi çökertmesi lazım ama öyle bir şey kesinlike yok :)
Dediğim gibi ben sadece çökmenin hangi çağrı sırasında yaşandığını söyledim. Başka bir amacım yoktu.
 
Son düzenleyen: Moderatör: