Analiza izbacivanja memorije u Windows s BSOD-om pomoću WinDBG

U vrijeme kritičnog kvara, Windows operativni sustav prekida i prikazuje plavi ekran smrti (BSOD). Sadržaj RAM-a i sve informacije o nastaloj pogrešci bilježe se u datoteku stranice. Pri sljedećem pokretanju sustava Windows, kreira se smetnjište s informacijama o uklanjanju pogrešaka na temelju spremljenih podataka. Kritički zapis greške stvara se u zapisniku događaja sustava.

Oprez! Izbacivanje u slučaju nužde ne stvara se ako diskovni podsustav ne uspije ili dođe do kritične pogreške tijekom početne faze dizanja sustava Windows.

sadržaj:

  • Vrste Windows Crash Dumps
  • Kako omogućiti stvaranje deponije memorije u sustavu Windows?
  • Instaliranje WinDBG na Windows
  • Konfiguriranje povezanosti .dmp datoteka s WinDBG
  • Konfiguriranje poslužitelja simbola za ispravljanje pogrešaka u WinDBG
  • Crash dump analiza u WinDBG-u

Vrste Windows Crash Dumps

Koristeći trenutni operativni sustav Windows 10 (Windows Server 2016) kao primjer, razmotrite glavne vrste deponija memorije koje sustav može stvoriti:

  • Mini deump memorije (256 KB) Ova vrsta datoteke sadrži minimalnu količinu podataka. Sadrži samo BSOD poruku o pogrešci, informacije o upravljačkim programima, procesima koji su bili aktivni u trenutku pada i koji je proces ili nit kernela uzrokovao pad..
  • Odlagalište memorije kernela. U pravilu, male veličine - trećina fizičke memorije. Izvatci memorije kernela više su složeni od mini dump. Sadrži informacije o upravljačkim programima i programima u načinu rada kernel, uključuje memoriju dodijeljenu sloju apstrakcije kernel Windows i hardver (HAL), kao i memoriju dodijeljenu vozačima i ostalim programima u načinu kernel..
  • Kompletan iskop memorije. Najveći je obujam i potrebna je memorija jednaka RAM-u vašeg sustava plus 1MB, što je potrebno da Windows stvori ovu datoteku.
  • Automatski izbacivanje memorije. Odgovara deponu jezgre memorije u smislu informacija. Razlikuje se samo u tome koliko prostora koristi za stvaranje dump datoteke. Ova vrsta datoteke ne postoji u sustavu Windows 7. Dodana je u sustavu Windows 8..
  • Aktivni deump memorije. Ova vrsta filtrira stavke koje ne mogu utvrditi uzrok kvara sustava. To je dodano u sustavu Windows 10, a posebno je korisno ako koristite virtualni stroj ili ako je vaš sustav Hyper-V domaćin..

Kako omogućiti stvaranje deponije memorije u sustavu Windows?

Pomoću programa Win + Pause otvorite prozor sa parametrima sustava i odaberite "Dodatni parametri sustava"(Napredne postavke sustava). Na kartici"dodatno"(Napredno), odjeljak"Preuzmite i vratite"(Pokretanje i oporavak) kliknite"parametri"(Postavke). U prozoru koji se otvori konfigurirajte radnju u slučaju kvara sustava. Potvrdite okvir"Zapisivanje događaja u zapisnik sustava"(Napišite događaj u zapisnik sustava) odaberite vrstu deponija koja bi se trebala stvoriti kad se sustav sruši. Ako je potvrdni okvir"Zamijenite postojeću dump datoteku"(Prepiši bilo koju postojeću datoteku)" potvrdni okvir, a datoteka će se prepisivati ​​svaki put kada se ruši. Bolje je poništiti taj okvir i tada ćete imati više podataka za analizu. Onemogućiti i automatsko ponovno pokretanje sustava (Automatski ponovno pokreni).

U većini slučajeva, mali spremnik memorije bit će dovoljan za analizu uzroka BSOD-a..

Sada, kada se pojavi BSOD, možete analizirati dump datoteku i pronaći uzrok neuspjeha. Zadani mini ispis spremljen je u mapu% systemroot% \ minidump. Za analizu dump datoteke preporučujem korištenje programa winDbg (Microsoft Kernel Debugger).

Instaliranje WinDBG na Windows

korisnost winDbg uključeno u "SDK za Windows 10"(Windows 10 SDK). Preuzmite ovdje..

Datoteka se zove winsdksetup.exe, veličina 1,3 MB.

WinDBG za Windows7 i starije sustave uključen je u paket "Microsoft Windows SDK za Windows 7 i .NET Framework 4". Preuzmite ovdje.

Pokrenite instalaciju i odaberite što trebate učiniti - instalirajte paket na ovo računalo ili ga preuzmite za instalaciju na druga računala. Instalirajte paket na lokalno računalo.

Možete instalirati cijeli paket, ali odaberite instalaciju samo alata za uklanjanje pogrešaka Alati za uklanjanje pogrešaka za Windows.

Nakon instalacije, WinDBG prečaci se mogu naći u startnom izborniku.

Konfiguriranje povezanosti .dmp datoteka s WinDBG

Da biste otvorili dump datoteke jednostavnim klikom, pridružite .dmp proširenje s uslužnim programom WinDBG.

  1. Otvorite naredbeni redak kao administrator i pokrenite naredbe za 64-bitni sustav:cd C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x64
    windbg.exe -IA

    za 32-bitni sustav:
    C: \ Programske datoteke (x86) \ Windows Kits \ 10 \ Debuggers \ x86
    windbg.exe -IA
  2. Kao rezultat, vrste datoteka: .DMP, .HDMP, .MDMP, .KDMP, .WEW - bit će preslikane u WinDBG.

Konfiguriranje poslužitelja simbola za ispravljanje pogrešaka u WinDBG

Simboli za uklanjanje pogrešaka (simboli za uklanjanje pogrešaka ili datoteke simbola) su blokovi podataka koji se generiraju tijekom sastavljanja programa zajedno s izvršnom datotekom. Takvi blokovi podataka sadrže podatke o imenima varijabli, nazvanim funkcijama, knjižnicama itd. Ovi podaci nisu potrebni prilikom pokretanja programa, ali su korisni pri uklanjanju pogrešaka. Microsoftove komponente sastavljaju se s znakovima distribuiranim kroz Microsoft Symbol Server.

Konfigurirajte WinDBG za upotrebu Microsoftovog poslužitelja simbola:

  • Otvori WinDBG;
  • Idite na izbornik file -> Put datoteke simbola;
  • Zapišite redak koji sadrži URL za preuzimanje simbola za uklanjanje pogrešaka s Microsoftove web stranice i mapu za spremanje predmemorije: SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols U primjeru, predmemorija se učitava u mapu E: \ Sym_WinDBG, možete ih odrediti.
  • Promjene spremite u izbornik. file -> Spremi radni prostor;

WinDBG će tražiti likove u lokalnoj mapi i, ako u njemu ne nađe potrebne znakove, samostalno će preuzeti znakove s određenog mjesta. Ako želite dodati vlastitu mapu sa simbolima, to možete učiniti na ovaj način:

SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols; c: \ Symbols

Ako nema internetske veze, prvo preuzmite paket simbola iz resursa Windows Symbol Packages..

Crash dump analiza u WinDBG-u

Program za uklanjanje pogrešaka WinDBG otvara dump datoteku i preuzima potrebne simbole za uklanjanje pogrešaka iz lokalne mape ili s interneta. Ne možete koristiti WinDBG tijekom ovog postupka. Pri dnu prozora (u naredbenoj liniji za uklanjanje pogrešaka) pojavit će se Debugee nije povezan.

Naredbe se unose u naredbenu liniju koja se nalazi na dnu prozora.

Najvažnija stvar na koju treba obratiti pažnju je kôd pogreške, koji je uvijek naveden u heksadecimalnoj vrijednosti i ima oblik 0xXXXXXXXX (naznačeno u jednoj od opcija - STOP: 0x0000007B, 02.02.2019 0008F, 0x8F). U našem primjeru kod pogreške 0x139.

Cijeli vodič za pogreške možete pronaći ovdje..

Program za uklanjanje pogrešaka nudi da biste pokrenuli naredbu! Analizirajte -v, samo pokažite mišem iznad veze i kliknite. Čemu služi ova naredba??

  • Obavlja preliminarnu analizu memorijskog deponija i daje detaljne informacije za početak analize..
  • Ova naredba prikazuje kod za zaustavljanje i simbolično ime pogreške..
  • Prikazuje hrpu naredbi koje su dovele do pada..
  • Pored toga, ovdje su prikazane kvarove IP adrese, procesa i registra..
  • Tim može dati gotove preporuke za rješenje problema..

Glavne točke na koje trebate obratiti pažnju prilikom analize nakon što pokrenete naredbu! Analyze -v (popis je nepotpun).

1: kd> !analizirati -v

************************************************** ***************************
* * *
* Analiza pogrešaka *
* * *
************************************************** ***************************

Simbolično ime pogreške STOP (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
Opis pogreške (komponenta kernela oštetila je kritičnu strukturu podataka. Ovo oštećenje potencijalno može omogućiti napadaču da preuzme kontrolu nad ovim strojem):

Kernel je oštetio kritičnu strukturu podataka. Korupcija može potencijalno omogućiti zlobnom korisniku kontrolu nad ovim strojem.
Argumenti za pogrešku su:

argumenti:
Arg1: 0000000000000003, LIST_ENTRY je oštećen (tj. Dvostruko uklanjanje).
Arg2: ffffd0003a20d5d0, adresa okvira zamke za iznimku koja je uzrokovala pogrešku
Arg3: ffffd0003a20d528, adresa zapisa iznimke za iznimku koja je uzrokovala pogrešku
Arg4: 0000000000000000, Rezervirano
Pojedinosti za uklanjanje pogrešaka:
------------------

Brojač prikazuje koliko se puta sustav srušio sa sličnom pogreškom:

CUSTOMER_CRASH_COUNT: 1

Glavna kategorija trenutnog kvara:

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

STOP kod pogreške u skraćenom obliku:

BUGCHECK_STR: 0x139

Proces tijekom čijeg se izvođenja došlo do kvara (nije nužno uzrok pogreške upravo u trenutku kvara u memoriji je taj proces izvršen):

PROCESS_NAME: sqlservr.exe

CURRENT_IRQL: 2

Dešifriranje koda pogreške: U ovoj je aplikaciji sustav otkrio prekrivanje međuspremnika snopa, što napadaču može omogućiti kontrolu nad ovom aplikacijom.

ERROR_CODE: (NTSTATUS) 0xc0000409 - Sustav je u ovoj aplikaciji otkrio prekoračenje međuspremnika temeljenog na stacku. Ovo prekoračenje potencijalno bi moglo omogućiti zlonamjernom korisniku da kontrolira ovu aplikaciju.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - Sustav je u ovoj aplikaciji otkrio prekoračenje međuspremnika temeljenog na stacku. Ovo prekoračenje potencijalno bi moglo omogućiti zlonamjernom korisniku da kontrolira ovu aplikaciju.

Posljednji poziv na hrpi:

LAST_CONTROL_TRANSFER: od fffff8040117d6a9 do fffff8040116b0a0

Skup poziva u trenutku kvara:

STACK_TEXT:
ffffd000'3a20d2a8 fffff804'0117d6a9: 00000000'00000139 00000000'00000003 ffffd000'3a20d5d0 ffffd000'3a20d528: nt! KeBugCheckEx
ffffd000'3a20d2b0 fffff804'0117da50: ffffe000'f3ab9080 ffffe000'fc37e001 ffffd000'3a20d5d0 fffff804'0116e2a2: nt! KiBugCheckDispatch + 0x69
ffffd000'3a20d3f0 fffff804'0117c150: 00000000'0000000000000000'00000000 00000000'00000000 00000000'00000000: nt! KiFastFailDispatch + 0xd0
ffffd000'3a20d5d0 fffff804'01199482: ffffc000'701ba270 ffffc000'00000001 000000ea'73f68040 fffff804'000006f9: nt! KiRaiseSecurityCheckFailure + 0x3d0
ffffd000'3a20d760 fffff804'014a455d: 00000000'00000001 ffffd000'3a20d941 ffffe000'fcacb000 ffffd000'3a20d951: nt! ?? :: FNODOBFM :: 'string' + 0x17252
ffffd000'3a20d8c0 fffff804'013a34ac: 00000000'00000004 00000000'00000000 ffffd000'3a20d9d8 ffffe001'0a34c600: nt! IopSynchronousServiceTail + 0x379
ffffd000'3a20d990 fffff804'0117d313: ffffffff'fffffffe 00000000'00000000 00000000'00000000000000eb'a0cf1380: nt! ntWriteFile + 0x694
ffffd000'3a20da90 00007ffb'475307da: 00000000'00000000 00000000'00000000 00000000'00000000 00000000'00000000: nt! KiSystemServiceCopyEnd + 0x13
000000ee'f25ed2b8 00000000'00000000: 00000000'00000000 00000000'00000000 00000000'00000000 00000000'00000000: 0x00007ffb'475307da

Dio koda gdje je došlo do pogreške:

FOLLOWUP_IP:
nt! KiFastFailDispatch + d0
fffff804'0117da50 c644242000 mov byte ptr [rsp + 20h], 0
FAULT_INSTR_CODE: 202444c6
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: nt! KiFastFailDispatch + d0
FOLLOWUP_NAME: MachineOwner

Naziv modula u tablici objekta kernel. Ako je analizator uspio otkriti upravljački program problema, ime se prikazuje u poljima MODULE_NAME i IMAGE_NAME:

MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe

Ako kliknete na poveznicu modula (nt), vidjet ćete detaljne informacije o putu i ostalim svojstvima modula. Nađite navedenu datoteku i proučite njena svojstva.

1: kd> lmvm nt
Pregledajte cijeli popis modula
Učitana slikovna datoteka simbola: ntkrnlmp.exe
Preslikana memorijska datoteka slike: C: \ ProgramData \ dbg \ sym \ ntoskrnl.exe \ 5A9A2147787000 \ ntoskrnl.exe
Put slike: ntkrnlmp.exe
Naziv slike: ntkrnlmp.exe
InternalName: ntkrnlmp.exe
OriginalFilename: ntkrnlmp.exe
ProductVersion: 6.3.9600.18946
FileVersion: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

U gornjem primjeru, analiza je ukazala na ntkrnlmp.exe datoteku kernel. Kada analiza ispisa memorije ukaže na upravljački program sustava (na primjer, win32k.sys) ili datoteku kernela (kao u našem primjeru ntkrnlmp.exe), ova datoteka najvjerojatnije nije uzrok problema. Često se ispostavi da problem leži u upravljačkom programu uređaja, postavkama BIOS-a ili kvaru hardvera.

Ako ste vidjeli da je BSOD zaslužan zbog upravljačkog programa treće strane, njegovo će ime biti navedeno u vrijednostima MODULE_NAME i IMAGE_NAME.

Na primjer:

Put slike: \ SystemRoot \ system32 \ drivers \ cmudaxp.sys
Naziv slike: cmudaxp.sys

Otvorite svojstva upravljačke datoteke i provjerite njezinu verziju. U većini slučajeva problem s upravljačkim programima rješava se njihovim ažuriranjem..