BSOD – što, zašto i kako

BSOD, iliti rušenje Windowsa (prekidanje izvršenja i prikaz plavog ekrana), događa se zbog jednog od sljedećih razloga:

  • pokretač uređaja (driver) ili funkcija operacijskog sustava koja se izvršava u kernel modu čini nepodržanu funkciju, kao na primjer kršenje memorijskog pristupa (kada primjera proces, driver ili funkcija pokušavaju pisati u read-only dio memorije ili pokušavaju čitati nemapiranu adresu unutar memorije)
  • hardverska greška
  • pokretač uređaja (driver) izričito pozove sistemsku funkciju KeBugCheckEX zato što utvrdi unutarnje stanje greške (utvrdi kako bi daljnji rad ugrozio podatke)
  • greška u memoriji koja stopira (pauzira) I/O izvršenje (Input/Output) – IRQL crash dumpovi

BSOD koji se događa u navedenim situacijama zaustavlja rad operacijskog sustava i radi (po zadanom u Windowsima 2000, XP, Vista. Windows 7 beta po zadanom ima kernel memory dump) small dump memorije (točnije ispis greške koja je uzrokovala BSOD – izbacuje dio sadržaja memorije u datom trenutku s opisom greške).

Kako je navedeno, greške zbog kojih dolazi mogu biti od strane drivera nekog uređaja, pogrešnog poziva funkcije kernelu (jezgri OS-a) od neke biblioteke (*.dll), sistemske datoteke (*.sys), procesa koji se izvršavaju u kernel modu, pogrešnog pristupa nekoj memorijskoj adresi (ovdje se misli na radnu memoriju).

Analiza samog crash dumpa može nam dati približan odgovor što je točno prouzročilo neku grešku ( http://support.microsoft.com/kb/315263 ).

Dump se može analizirati posebnim alatima kao što je Microsoftov debugging tools (https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/http://www.microsoft.com/whdc/devtools/debugging/default.mspx ). Osnovni prikaz greške (sam plavi ekran) NE MOŽE nam dati odgovor što je prouzročilo rušenje, jer je za jedan tip greške (primjer DRIVER_IRQL_NOT_LESS_OR_EQUAL) moguć veliki broj različitih rješenja (može biti do neispravne memorije, neispravnog pristupa funkciji kernela od primjerice antivirusnog softvera, vatrozida, mrežne kartice, ili čak i od virusa, rootkita, trojanca – you name it…)

Kako bi analizirali crash dump potrebno nam je imati minidump od samog rušenja. Minidump (postoje i drugi tipovi, no ovaj nam najviše može koristiti, a i najčešći je oblik dumpa – postavljen je po zadanom u windowsima) ako nam nije postavljen podešavamo na slijedeći način:

Start > run > sysdm.cpl klik na OK
Dobijete applet system properties, odaberete tab Advanced, pod odjeljkom Startup and recovery kliknete na Settings, dobijete applet Startup and recovery (vidi slika 1.)
Kako bi dobili memory dump potrebno je pod write debugging information odabrati Small memory dump (64 KB) (na 64-bitnim operacijskim Small memory dump (128 KB) ).
Po zadanom memory dump se zapisuje u mapu %SystemRoot%\Minidump (što označava obično C:\WINDOWS\minidump )

Kako bi napravili analizu dumpa potrebno je imati instalirane Windows debugging tools ovisno o operacijskom sustavu kojeg imate, i simbole za windowse koje koristite. U mom primjeru to su debugging tools 64-bitna verzija (Native – postoji i posebna verzija za Intel Itanium arhitekturu), te simboli za Windows XP 64-bitnu arhitekturu (Windows Server 2003 with Service Pack 2 x64-based retail symbols – Windows XP 64-bit je zasnovan na Server 2003 jezgri). Napominjem da je simbole moguće zadati i da se učitavaju sa Microsoftovih stranica, daklem simbole skidajte opcionalno (vidi pojašnjenje kako koristiti Windows symbol server dolje)

Nakon što ste instalirali debugger i simbole potrebno je debugger podesiti Pokrenete Windbg (Start > Programs > Debugging Tools for Windows > Windbg).

Po pokretanju programa odaberete opciju File > Symbol File Path (slika 2.), te ako ste instalirali simbole s tipkom Browe ih nađite (zadano C:\WINDOWS\Symbols ), ili u slučaju da ih niste instalirali već želite koristiti Symbol server koristite slijedeći primjer SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols –  (Primjer putanje C:\WINDOWS\symbols je proizvoljan i označava lokalno mjesto gdje želite spremiti simbole, i da zvjezdice su obavezne) detaljnije pročitajte ovdje (http://support.microsoft.com/kb/311503)

Kliknite na OK. Spremni ste za debugiranje crash dumpa… U windbg kliknite File > Open Crash dump, minidump nađite u mapi C:\WINDOWS\minidump i otvorite ga. Windbg će napraviti osnovnu analizu dumpa. Primjetite u Windbg prozoru !analyze -v opciju (Slika 4.) kliknite na nju, ili ručno upišite !analyze -v, te pritisnite Enter. Pojaviti će Vam se verbose ispis minidumpa (opširniji). Na osnovu opširnijeg ispisa moguće je utvrditi razlog minidumpa. U datom primjeru je BSOD (IRQL_NO_LESS…) prouzročio web modul Avasta (aswMon2.SYS – Slika 5.).

Prilikom analize minidump datoteka potrebno je otvoriti par dumpova te ih usporediti, te u konačnici korištenjem iskustva i dedukcije utvrditi problem.

Situacija iz primjera je konkretno bila vezana uz usb ADSL modem zbog kojeg je dolazilo do rušenja, što se manifestiralo kroz Avastov web modul i (analizom i drugih crash dumpova) kernel OS-a.

Nadam se da je ova tema bar donekle (teško je dati kratki i jednostavan opis što je BSOD) pojasnila detalje vezane uz BSOD i kako utvrditi razloge zašto do njega dolazi.

Odgovori