Ani Ölümler ve IFEO


Merhaba,
Bugün uygulamaların ani ölümleri ile ilgileneceğiz. İngilizcesi, “Sudden death”. Uygulamanın çalışmaya başlar başlamaz kapanması anlamına geliyor. Bugüne kadar karşılaşmış olabilirsiniz. Uygulamaya çift tıklarsınız ancak uygulama açılmaz veya çok kısa bir süre görünür ve kapanır
veya SCM (Service Control Manager) içinden bir servisi başlatırsınız ancak “service terminated unexpectedly” gibi bir hata alıyorsunuz veya servisin hiç başlamadığını görüyorsunuz. Uygulama loglarına baktığınızda aşağıdaki gibi kayıtlarla karşılaşabilirsiniz :

 

Log Name:      Application
Source:        Application Error
Date:          13.05.2010 17:14:09
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      bilgisayar_adı
Description:
Faulting application name: AniÖlüm.exe, version: 1.0.0.1, time stamp: 0x4bebdf34
Faulting module name: AniÖlüm.exe, version: 1.0.0.1, time stamp: 0x4bebdf34
Exception code: 0xc0000005

 

Log Name:      Application
Source:        Windows Error Reporting
Date:          13.05.2010 17:14:13
Event ID:      1001
Task Category: None
Level:         Information
Keywords:      Classic
User:          N/A
Computer:      bilgisayar_adı
Description:
Fault bucket 1859722586, type 1
Event Name: APPCRASH
Response: Not available

 

“Ani ölüm” durumundaki sorun da tam olarak bu esasında. Uygulama çalışmaya başladıktan bir süre sonra hata alıp kapansaydı geçen yazıdaki adımları uygulayabilirdik. Ancak, “ani ölümlerde” debugger’ı uygulamaya bağlayacak kadar dahi zaman olmaz.

Çözüm : IFEO ( Image File Execution Options ),
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

İşletim Sistemi, bir uygulamayı çalıştırırken bu Kayıt Defteri Anahtarını (KDA = registry key) muhakkak okur ve çalıştıracağı uygulama ile aynı adlı bir subkey olup olmadığını kontrol eder. Varsa eğer bu key’e ait kayıt defteri değerlerini (registry values) sorgular ve ona göre aksiyon alır. Örneğin, debugger değeri içinde yer alan uygulama çalıştırılır.

Meraklısına Not :
İşletim Sistemi’nin bir programı çalıştırırken hangi KDA’ları okuduğunu gözlemleyebilirsiniz. ProcessMonitor (ProcMon) adlı araç sistemdeki faaliyetlerin bir kısmını takip eder (dosya, network, kayıt defteri erişimi, process/thread faaliyetleri). ProcMon’u aşağıdaki adresten indirip kurabilirsiniz :
http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

#1 ProcMon’u çalıştırın
#2 Herhangi bir uygulamayı çalıştırın, örneğin notepad.exe
#3 Notepad.exe çalışmaya başladıktan sonra ProcMon’un trace almasını durdurun.
#4 Sonuçları açtığınız uygulamaya göre filtreleyin ( ProcessName is equal Notepad.exe )
#5 Filtrelenmiş sonuçta erişilen dosya ve kayıt defteri kaynaklarını görebelirsiniz.

 

Yazının sonunda test için kullanabileceğiniz küçük bir uygulama var : “AniÖlüm.exe”yi AniÖlüm.zip adlı sıkıştırılmış dosyanın içinde bulabilirsiniz. VC Çalışma Zamanı Kütüphaneleri ile ilgili bir sorunla karşılaşırsanız http://blogs.msdn.com/b/hmm/archive/2015/05/15/dump-alma-hang-mode-i.aspx 
adresindeki yazıma göz atabilirsiniz.

Deneme
#1 Uygulamayı bir dizine kopyalayın ve üzerine çift tıklayın.
#2 Explorer içindeyken imleç beklemeyi gösteren animasyonu başlatacak, sonra imleç normale dönecek. Bu arada uygulama açılmayacak.
#3 Görev Yöneticisini açın, processes sekmesine gelin, ve isme göre uygulamaları sıralatın.
#4 AniÖlüm.exe’yi tekrar çalıştırın, kısa bir süreliğine Görev Yöneticisinde AniÖlüm.exe’yi görebilirsiniz. Veya, yukarıda bahsettiğim ProcMon
aracıyla AniÖlüm.exe’ye ait işlemleri görebilirsiniz.

 

Image File Execution Options ve dump almayı hazırlanma

 

#1 “C:\Program Files\Debugging Tools for Windows (x86)” dizinine DumpAO.bat isimli bir dosya açın.

#2 Dosyanın içine aşağıdaki satırı kopyalayın :
cscript.exe "C:\Program Files\Debugging Tools for Windows (x86)\adplus.vbs" -crash -o c:\dumps -quiet -sc %1

#3 Registry Editor’ü açın (regedt32.exe)

#4 Aşağıdaki KDA’yı bulun :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

#5 Bu anahtarın altına adı “AniÖlüm.exe” olan yeni bir alt anahtar yaratın.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\AniÖlüm.exe

#6 AniÖlüm.exe adlı anahtarın altına yeni bir kayıt defteri değeri tanımlayın. Bu yeni değerin adı debugger, tipi string, içeriği de
"C:\Program Files\Debugging Tools for Windows (x86)\DumpAO.bat" olacak. Çift tırnaklar dahil.

Key Name:          HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\AniÖlüm.exe
  Name:            debugger
  Type:            REG_SZ
  Data:            "C:\Program Files\Debugging Tools for Windows (x86)\DumpAO.bat"

 

Artık AniÖlüm.exe uygulamasını her çalıştırdığınızda cdb.exe de çalışacak ve AniÖlüm.exe her exception ürettiğinde c:\dumps dizini altına dump dosyası üretecek. Şimdi bunun denemesini yapalım. AniÖlüm.exe uygulamasını çalıştırın ve c:\dumps dizininin içine bakın. Aşağıdaki dosyaları görmeniz gerekir (sizde dosya isimleri farklı ama aynı formatta olacaktır).

 

C:\dumps>dir /s
Volume in drive C has no label.
Volume Serial Number is 2073-7A27

Directory of C:\dumps

13.05.2010  15:25    <DIR>          .
13.05.2010  15:25    <DIR>          ..
13.05.2010  15:25    <DIR>          Crash_Mode__Date_05-13-2010__Time_15-25-1212
               0 File(s)              0 bytes

Directory of C:\dumps\Crash_Mode__Date_05-13-2010__Time_15-25-1212

13.05.2010  15:25    <DIR>          .
13.05.2010  15:25    <DIR>          ..
13.05.2010  15:25             4.809 ADPlus_report.txt
13.05.2010  15:25    <DIR>          CDBScripts
13.05.2010  15:25           314.078 PID-0__Spawned0__1st_chance_AccessViolation__mini_1090_2010-05-13_15-25-17-462_1adc.dmp
13.05.2010  15:25        37.625.208 PID-0__Spawned0__1st_chance_Process_Shut_Down__full_1090_2010-05-13_15-25-24-053_1adc.dmp
13.05.2010  15:25        44.724.812 PID-0__Spawned0__2nd_chance_AccessViolation__full_1090_2010-05-13_15-25-18-041_1adc.dmp
13.05.2010  15:25            43.164 PID-0__Spawned0__Date_05-13-2010__Time_15-25-1212.log
13.05.2010  15:25            13.866 Process_List.txt
               6 File(s)     82.725.937 bytes

Directory of C:\dumps\Crash_Mode__Date_05-13-2010__Time_15-25-1212\CDBScripts

13.05.2010  15:25    <DIR>          .
13.05.2010  15:25    <DIR>          ..
13.05.2010  15:25            28.637 PID-0__Spawned0.cfg
               1 File(s)         28.637 bytes

     Total Files Listed:
               7 File(s)     82.754.574 bytes
    

 

 

Hoşçakalın

-faik


Comments (0)

Skip to main content