Analiza odlaganja pomnilnika v operacijskem sistemu Windows z BSOD z uporabo WinDBG

V času kritične napake operacijski sistem Windows prekine in prikaže modri zaslon smrti (BSOD). Vsebina RAM-a in vse informacije o napaki se pojavijo v datoteki strani. Pri naslednjem zagonu Windows se ustvari smetišče zrušitve z informacijami za odpravljanje napak na podlagi shranjenih podatkov. V sistemskem dnevniku dogodkov se ustvari zapis kritične napake.

Pozor!! Zasilni izhod ni ustvarjen, če diskovni podsistem ne uspe ali se v začetni fazi zagona Windows pojavi kritična napaka.

Vsebina:

  • Vrste Windows Crash Dumps
  • Kako omogočiti ustvarjanje pomnilnika pomnilnika v operacijskem sistemu Windows?
  • Namestitev WinDBG v operacijskem sistemu Windows
  • Konfiguriranje povezave datotek .dmp z WinDBG
  • Konfiguriranje strežnika simbolov za odpravljanje napak v WinDBG
  • Analiza smetišča zruši v WinDBG

Vrste Windows Crash Dumps

Zgled trenutnega operacijskega sistema Windows 10 (Windows Server 2016) kot primer upoštevajte glavne vrste pomnilnikov, ki jih sistem lahko ustvari:

  • Mini pomnilnik pomnilnika (256 KB) Ta vrsta datoteke vključuje minimalno količino informacij. Vsebuje samo sporočilo o napaki BSOD, informacije o gonilnikih, procesih, ki so bili aktivni v času zrušitve, in kateri proces ali nit jedra je povzročil zrušitev..
  • Odlagališče pomnilnika jedra. Praviloma majhne velikosti - tretjina fizičnega spomina. Izpis pomnilnika jedra je bolj beseden kot mini smetišče. Vsebuje podatke o gonilnikih in programih v načinu jedra, vključuje pomnilnik, dodeljen sloju abstrakcije jedra Windows in strojno opremo (HAL), ter pomnilnik, dodeljen gonilnikom in drugim programom v načinu jedra..
  • Popolni pomnilnik. Največji po obsegu in potrebuje pomnilnik enak RAM-u vašega sistema in 1 MB, kar je potrebno za Windows, da ustvari to datoteko.
  • Samodejni pomnilnik pomnilnika. Glede na podatke ustreza jedru pomnilnika jedra. Razlikuje se le v tem, koliko prostora porabi za ustvarjanje datoteke dump. Ta vrsta datoteke ni obstajala v sistemu Windows 7. Dodana je bila v sistemu Windows 8..
  • Aktivni pomnilnik pomnilnika. Ta vrsta filtrira elemente, ki ne morejo določiti vzroka okvare sistema. To je bilo dodano v sistemu Windows 10 in je še posebej uporabno, če uporabljate navidezni stroj ali če je vaš sistem Hyper-V gostitelj..

Kako omogočiti ustvarjanje pomnilnika pomnilnika v operacijskem sistemu Windows?

Z Win + Pause odprite okno s sistemskimi parametri in izberite "Dodatni sistemski parametri"(Napredne sistemske nastavitve). Na zavihku"Izbirno"(Napredno), razdelek"Prenesite in obnovite"(Zagon in obnovitev) kliknite"Parametri"(Nastavitve). V oknu, ki se odpre, konfigurirajte dejanje v primeru okvare sistema. Potrdite polje"Zapišite dogodke v sistemski dnevnik"(Napišite dogodek v sistemski dnevnik), izberite vrsto smetišča, ki ga je treba ustvariti, ko sistem zruši. Če je v potrditvenem polju"Zamenjajte obstoječo datoteko dump"(Prepiši vsako obstoječo datoteko) potrditveno polje bo datoteka prepisana vsakič, ko se zruši. Bolje je, da počistite to polje, nato pa boste imeli več informacij za analizo. Onemogočite tudi samodejni ponovni zagon sistema (Samodejno ponovno zaženite).

V večini primerov bo za analizo vzroka BSOD dovolj majhen pomnilnik..

Zdaj, ko se pojavi BSOD, lahko analizirate dump datoteko in ugotovite vzrok za neuspeh. Privzeti mini zapis se shrani v mapo% systemroot% \ minidump. Za analizo dump datoteke priporočam uporabo programa Windbg (Microsoft Kernel Debugger).

Namestitev WinDBG v operacijskem sistemu Windows

Uporabnost Windbg vključeno v "Windows 10 SDK"(Windows 10 SDK). Prenesite tukaj..

Datoteka se pokliče windksetup.exe, velikost 1,3 MB.

WinDBG za Windows7 in starejše sisteme je vključen v paket "Microsoft Windows SDK za Windows 7 in .NET Framework 4". Prenesite tukaj.

Zaženite namestitev in izberite, kaj je treba storiti - namestite paket v ta računalnik ali ga prenesite za namestitev v druge računalnike. Paket namestite na lokalni računalnik.

Lahko namestite celoten paket, vendar želite namestiti samo orodje za odpravljanje napak Orodja za odpravljanje napak za Windows.

Po namestitvi lahko v začetnem meniju najdete bližnjice WinDBG.

Konfiguriranje povezave datotek .dmp z WinDBG

Če želite odpreti dump datoteke s preprostim klikom, povežite .dmp razširitev s pripomočkom WinDBG.

  1. Odprite ukazni poziv kot skrbnik in zaženite ukaze za 64-bitni sistem:cd C: \ programske datoteke (x86) \ kompleti za Windows \ 10 \ Odpravljanje napak \ x64
    windbg.exe -IA

    za 32-bitni sistem:
    C: \ programske datoteke (x86) \ kompleti za Windows \ 10 \ Odpravljanje napak \ x86
    windbg.exe -IA
  2. Kot rezultat, bodo vrste datotek: .DMP, .HDMP, .MDMP, .KDMP, .WEW - preslikane v WinDBG.

Konfiguriranje strežnika simbolov za odpravljanje napak v WinDBG

Simboli za odpravljanje napak (simboli za odpravljanje napak ali datoteke s simboli) so podatkovni bloki, ustvarjeni med sestavljanjem programa skupaj z izvršljivo datoteko. Taki podatkovni bloki vsebujejo informacije o imenih spremenljivk, imenovanih funkcijah, knjižnicah itd. Ti podatki pri zagonu programa niso potrebni, vendar so uporabni pri odpravljanju napak. Microsoftove komponente se prenašajo z znaki, distribuiranimi prek Microsoftovega strežnika simbolov.

Konfigurirajte WinDBG za uporabo strežnika Microsoft Symbol:

  • Odprite WinDBG;
  • Pojdite na meni Datoteka -> Pot datoteke s simboli;
  • Zapišite vrstico z URL-jem za nalaganje napak za odpravljanje napak s Microsoftovega spletnega mesta in mapo za shranjevanje predpomnilnika: SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols V primeru je predpomnilnik naložen v mapo E: \ Sym_WinDBG, lahko podate katero koli.
  • Ne pozabite, da spremembe shranite v meni. Datoteka -> Shranite WorkSpace;

WinDBG bo iskal znake v lokalni mapi in, če v njej ne najde potrebnih znakov, bo sam prenesel znake z določenega mesta. Če želite dodati svojo mapo s simboli, lahko to naredite tako:

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

Če ni internetne povezave, najprej prenesite paket simbolov iz vira paketa Windows Symbol Packages..

Analiza smetišča zruši v WinDBG

Naprave za odpravljanje napak WinDBG odpre dump datoteko in naloži potrebne simbole za odpravljanje napak iz lokalne mape ali iz interneta. Med tem postopkom ne morete uporabljati WinDBG. Na dnu okna (v ukazni vrstici za odpravljanje napak) se prikaže Debugee ni povezan.

Ukazi se vnesejo v ukazni vrstici, ki se nahaja na dnu okna.

Najpomembnejša stvar, na katero morate biti pozorni, je koda napake, ki je vedno navedena v šestnajstiški vrednosti in ima obliko 0xXXXXXXXXX (navedeno v eni od možnosti - STOP: 0x0000007B, 02.02.2019 0008F, 0x8F). V našem primeru koda napake 0x139.

Celoten vodnik o napakah najdete tukaj..

Razhroščevalnik ponuja zagon ukaza! Analizirajte -v, le s kazalcem miške kliknite povezavo in kliknite. Zakaj je ta ukaz??

  • Izvede predhodno analizo pomnilnika in poda podrobne informacije za začetek analize..
  • Ta ukaz prikaže kodo zaustavitve in simbolično ime napake..
  • Prikaže kup ukazov za ukaze, ki so privedli do strmoglavljenja..
  • Poleg tega so tu prikazani okvare IP, obdelava in registracija..
  • Skupina lahko poda pripravljena priporočila za rešitev težave..

Glavne točke, na katere morate biti pozorni, ko analizirate po izvajanju ukaza! Analyse -v (seznam je nepopoln).

1: kd> !analizirati -v

******************************************** .... ******************….
* * *
* Analiza napake *
* * *
******************************************** .... ******************….

Simbolično ime napake STOP (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
Opis napake (komponenta jedra je poškodovala kritično strukturo podatkov. Poškodba lahko napadalcu omogoči nadzor nad tem strojem):

Sestavni del jedra je poškodoval kritično strukturo podatkov. Korupcija lahko zlonamernemu uporabniku omogoči nadzor nad tem strojem.
Argumenti za napako so:

Argumenti:
Arg1: 0000000000000003, LIST_ENTRY je poškodovan (tj. Dvojno odstranjevanje).
Arg2: ffffd0003a20d5d0, naslov okvira pasti za izjemo, ki je povzročila napako
Arg3: ffffd0003a20d528, naslov zapisa izjeme za izjemo, ki je povzročila napako
Arg4: 0000000000000000, rezervirano
Podrobnosti za odpravljanje napak:
------------------

Števec prikazuje, kolikokrat se je sistem zrušil s podobno napako:

CUSTOMER_CRASH_COUNT: 1

Glavna kategorija trenutne napake:

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

STOP koda napake v skrajšani obliki:

BUGCHECK_STR: 0x139

Postopek, med izvedbo katerega je prišlo do okvare (ni nujno, da je bil vzrok napake, ravno v času okvare v pomnilniku je bil ta postopek izveden):

PROCESS_NAME: sqlservr.exe

CURRENT_IRQL: 2

Dešifriranje kode napake: V tej aplikaciji je sistem zaznal preliv medpomnilnika skladovnice, kar lahko napadalcu omogoči nadzor nad to aplikacijo.

ERROR_CODE: (NTSTATUS) 0xc0000409 - Sistem je v tej aplikaciji zaznal prekoračitev medpomnilnika, ki temelji na skladovnici. Ta prekoračitev lahko zlonamernemu uporabniku omogoči nadzor nad to aplikacijo.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - Sistem je v tej aplikaciji zaznal prekoračitev medpomnilnika, ki temelji na skladovnici. Ta prekoračitev lahko zlonamernemu uporabniku omogoči nadzor nad to aplikacijo.

Zadnji klic v skladbi:

LAST_CONTROL_TRANSFER: od fffff8040117d6a9 do fffff8040116b0a0

Količine klicev v času odpovedi:

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

Del kode, v kateri je prišlo do napake:

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

Ime modula v tabeli predmetov jedra. Če je analizatorju uspelo zaznati težavni gonilnik, je ime prikazano v poljih MODULE_NAME in IMAGE_NAME:

MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe

Če kliknete povezavo modula (nt), boste videli podrobne informacije o poti in drugih lastnostih modula. Poiščite določeno datoteko in preučite njene lastnosti.

1: kd> lmvm nt
Brskaj po celotnem seznamu modulov
Naložena slikovna datoteka simbola: ntkrnlmp.exe
Preslikana slikovna datoteka: C: \ ProgramData \ dbg \ sym \ ntoskrnl.exe \ 5A9A2147787000 \ ntoskrnl.exe
Pot slike: ntkrnlmp.exe
Ime slike: ntkrnlmp.exe
InternalName: ntkrnlmp.exe
OriginalFilename: ntkrnlmp.exe
ProductVersion: 6.3.9600.18946
FileVersion: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

V zgornjem primeru je analiza pokazala na datoteko jedra ntkrnlmp.exe. Ko analiza pomnilniškega pomnilnika kaže na sistemski gonilnik (na primer win32k.sys) ali datoteko jedra (kot v našem primeru ntkrnlmp.exe), najverjetneje ta datoteka ni vzrok težave. Pogosto se izkaže, da je težava v gonilniku naprave, nastavitvah BIOS-a ali okvari strojne opreme.

Če ste videli, da je BSOD posledica gonilnika drugega proizvajalca, bo njegovo ime navedeno v vrednostih MODULE_NAME in IMAGE_NAME.

Na primer:

Pot slike: \ SystemRoot \ system32 \ gonilniki \ cmudaxp.sys
Ime slike: cmudaxp.sys

Odprite lastnosti gonilniške datoteke in preverite njeno različico. V večini primerov se težava z gonilniki reši z njihovo posodobitvijo..