Analýza výpisu pamäte na Windows s BSOD pomocou WinDBG

V čase kritickej poruchy operačný systém Windows preruší a zobrazí modrú obrazovku smrti (BSOD). Obsah pamäte RAM a všetky informácie o chybe, ktorá sa vyskytne, sa zaznamenajú do súboru stránky. Pri nasledujúcom spustení systému Windows sa vytvorí výpis stavu zlyhania s ladiacimi informáciami založenými na uložených údajoch. V protokole udalostí systému sa vytvorí záznam kritickej chyby.

pozor! Núdzový výpis sa nevytvorí, ak zlyhá diskový subsystém alebo sa vyskytne kritická chyba počas počiatočnej fázy zavádzania systému Windows.

obsah:

  • Typy výpisov Windows Crash
  • Ako povoliť vytváranie výpisu pamäte v systéme Windows?
  • Inštalácia WinDBG na Windows
  • Konfigurácia priradenia súborov .dmp k WinDBG
  • Konfigurácia servera symbolov ladenia vo WinDBG
  • Analýza výpisu z havárie vo WinDBG

Typy výpisov Windows Crash

Ako príklad použite aktuálny operačný systém Windows 10 (Windows Server 2016), zvážte hlavné typy výpisov pamäte, ktoré môže systém vytvoriť:

  • Mini výpis z pamäte (256 KB) Tento typ súboru obsahuje minimálne množstvo informácií. Obsahuje iba chybovú správu BSOD, informácie o ovládačoch, procesoch, ktoré boli aktívne v čase havárie a ktorý proces alebo vlákno jadra spôsobilo haváriu.
  • Výpis pamäte jadra. Spravidla malá veľkosť - jedna tretina fyzickej pamäte. Výpis pamäte jadra je podrobnejší ako výpis mini. Obsahuje informácie o ovládačoch a programoch v režime jadra, obsahuje pamäť vyhradenú pre jadro systému Windows a vrstvu hardvérovej abstrakcie (HAL), ako aj pamäť pridelenú vodičom a iným programom v režime jadra..
  • Úplný výpis pamäte. Najväčší objem a vyžaduje pamäť rovnajúcu sa RAM vášho systému plus 1 MB, čo je potrebné pre Windows na vytvorenie tohto súboru.
  • Automatický výpis pamäte. Z hľadiska informácií zodpovedá výpisu základnej pamäte. Líši sa iba tým, koľko miesta používa na vytvorenie súboru výpisu. Tento typ súboru v systéme Windows 7 neexistoval. Bol pridaný do systému Windows 8..
  • Výpis aktívnej pamäte. Tento typ odfiltruje položky, ktoré nedokážu určiť príčinu zlyhania systému. Toto bolo pridané v systéme Windows 10 a je to užitočné najmä v prípade, že používate virtuálny počítač alebo ak je váš systém hostiteľom Hyper-V..

Ako povoliť vytváranie výpisu pamäte v systéme Windows?

Pomocou Win + Pause otvorte okno so systémovými parametrami, vyberte „Ďalšie systémové parametre„(Rozšírené systémové nastavenia). Na karte“dodatočne„(Rozšírené), oddiel“Stiahnite a obnovte„(Spustenie a obnova) kliknite na položku“parametre"(Nastavenia). V otvorenom okne nakonfigurujte akciu v prípade zlyhania systému. Začiarknite políčko"Zápis udalostí do systémového denníka„(Napíšte udalosť do systémového denníka), vyberte typ výpisu, ktorý by sa mal vytvoriť pri zlyhaní systému. Ak je začiarknuté políčko“Nahradiť existujúci súbor výpisu"(Prepísať akýkoľvek existujúci súbor), potom bude súbor prepísaný vždy, keď dôjde k jeho zlyhaniu. Je lepšie zrušiť začiarknutie tohto políčka, potom budete mať ďalšie informácie na analýzu. Vypnite tiež automatické reštartovanie systému (Automaticky reštartovať).

Vo väčšine prípadov bude pre analýzu príčiny BSOD stačiť malý výpis pamäte..

Teraz, keď sa vyskytne BSOD, môžete analyzovať súbor výpisu a nájsť príčinu zlyhania. Predvolený mini výpis je uložený v priečinku% systemroot% \ minidump. Na analýzu súboru s výpisom sa odporúča použiť program WinDbg (Ladiaci program Microsoft Kernel Debugger).

Inštalácia WinDBG na Windows

užitočnosť WinDbg zahrnuté v “Windows 10 SDK“(Windows 10 SDK). Stiahnite si tu..

Súbor sa volá winsdksetup.exe, veľkosť 1,3 MB.

WinDBG pre Windows7 a staršie systémy je súčasťou balíka „Microsoft Windows SDK pre Windows 7 a .NET Framework 4“. Stiahnite si tu.

Spustite inštaláciu a vyberte, čo je potrebné urobiť - nainštalujte balík do tohto počítača alebo si ho stiahnite na inštaláciu do iných počítačov. Nainštalujte balík na lokálny počítač.

Môžete nainštalovať celý balík, ale ak chcete nainštalovať iba nástroj na ladenie, vyberte položku Ladiace nástroje pre Windows.

Po inštalácii nájdete skratky WinDBG v ponuke Štart.

Konfigurácia priradenia súborov .dmp k WinDBG

Ak chcete otvoriť súbory výpisu jednoduchým kliknutím, priraďte príponu .dmp k obslužnému programu WinDBG.

  1. Otvorte príkazový riadok ako správca a spustite príkazy pre 64-bitový systém:cd C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x64
    windbg.exe -IA

    pre 32-bitový systém:
    C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x86
    windbg.exe -IA
  2. Výsledkom je, že typy súborov: .DMP, .HDMP, .MDMP, .KDMP, .WEW - budú mapované do WinDBG..

Konfigurácia servera symbolov ladenia vo WinDBG

Ladiace symboly (ladiace symboly alebo súbory symbolov) sú dátové bloky generované počas kompilácie programu spolu s spustiteľným súborom. Takéto dátové bloky obsahujú informácie o názvoch premenných, tzv. Funkciách, knižniciach atď. Tieto údaje nie sú potrebné pri spustení programu, ale užitočné pri ladení programu. Komponenty spoločnosti Microsoft sa kompilujú so znakmi distribuovanými prostredníctvom servera Microsoft Symbol Server.

Nakonfigurujte WinDBG na používanie servera Microsoft Symbol:

  • Otvorte program WinDBG;
  • Prejdite do ponuky súbor -> Cesta súboru so symbolom;
  • Napíšte riadok obsahujúci adresu URL na stiahnutie ladiacich symbolov z webovej lokality spoločnosti Microsoft a priečinok na uloženie vyrovnávacej pamäte: SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols V príklade je vyrovnávacia pamäť načítaná do priečinka E: \ Sym_WinDBG, môžete zadať ľubovoľný.
  • Nezabudnite uložiť zmeny do ponuky. súbor -> Uložiť pracovný priestor;

WinDBG vyhľadá znaky v lokálnom priečinku a ak nenájde potrebné znaky, stiahne znaky z určeného servera samostatne. Ak chcete pridať svoj vlastný priečinok so symbolmi, môžete to urobiť takto:

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

Ak nie je k dispozícii pripojenie na internet, stiahnite si najskôr balík symbolov z prostriedku Windows Symbol Packages..

Analýza výpisu z havárie vo WinDBG

Ladiaci program WinDBG otvorí súbor výpisu a stiahne potrebné symboly na ladenie z lokálneho priečinka alebo z Internetu. Počas tohto procesu nemôžete používať program WinDBG. V dolnej časti okna (na príkazovom riadku ladiaceho programu) sa zobrazí Debuga nie je pripojená.

Príkazy sa zadávajú do príkazového riadku umiestneného v dolnej časti okna.

Najdôležitejšou vecou, ​​ktorú treba venovať, je chybový kód, ktorý je vždy uvedený v hexadecimálnej hodnote a má tvar 0XXXXXXXXX (uvedené v jednej z možností - STOP: 0x0000007B, 07/02/2019 0008F, 0x8F). V našom príklade kód chyby 0x139.

Úplný sprievodca chybami nájdete tu..

Ladiaci program ponúka spustenie príkazu! Analyzovať -v, stačí umiestniť kurzor myši na odkaz a kliknúť. Na čo slúži tento príkaz??

  • Vykonáva predbežnú analýzu výpisu z pamäte a poskytuje podrobné informácie na začatie analýzy..
  • Tento príkaz zobrazí kód zastavenia a symbolický názov chyby..
  • Zobrazuje balík príkazových volaní, ktoré viedli k havárii..
  • Okrem toho sa tu zobrazujú poruchy IP adresy, procesov a registrácie..
  • Tím môže poskytnúť hotové odporúčania na vyriešenie problému..

Hlavné body, ktorým by ste mali venovať pozornosť pri analýze po spustení príkazu! Analyze -v (výpis je neúplný).

1: kd> !analyzovať -v

************************************************** ***************************
* * *
* Analýza chýb *
* * *
************************************************** ***************************

Symbolický názov chyby STOP (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
Popis chyby (Komponent jadra poškodil štruktúru kritických údajov. Toto poškodenie by potenciálne mohlo útočníkovi umožniť získať kontrolu nad týmto počítačom):

Komponent jadra poškodil kritickú dátovú štruktúru. Poškodenie by potenciálne mohlo umožniť škodlivému používateľovi získať kontrolu nad týmto počítačom.
Argumenty chyby sú:

argumenty:
Arg1: 0000000000000003, A LIST_ENTRY bol poškodený (t. J. Dvojité odstránenie).
Arg2: ffffd0003a20d5d0, Adresa rámca pasce pre výnimku, ktorá spôsobila chybu
Arg3: ffffd0003a20d528, Adresa záznamu výnimky pre výnimku, ktorá spôsobila chybu
Arg4: 0000000000000000, vyhradené
Podrobnosti ladenia:
------------------

Počítadlo ukazuje, koľkokrát systém havaroval s podobnou chybou:

CUSTOMER_CRASH_COUNT: 1

Hlavná kategória zlyhania prúdu:

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

Chybový kód STOP v skrátenom formáte:

BUGCHECK_STR: 0x139

Proces, pri ktorom došlo k zlyhaniu (nie nevyhnutne príčina chyby, práve v čase zlyhania v pamäti bol tento proces vykonaný):

PROCESS_NAME: sqlservr.exe

CURRENT_IRQL: 2

Dešifrovanie chybového kódu: V tejto aplikácii systém zistil pretečenie zásobníka, čo môže útočníkovi umožniť získať kontrolu nad touto aplikáciou.

ERROR_CODE: (NTSTATUS) 0xc0000409 - Systém zistil v tejto aplikácii prekročenie zásobníka založeného na zásobníku. Toto prekročenie by potenciálne mohlo umožniť škodlivému používateľovi získať kontrolu nad touto aplikáciou.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - Systém zistil v tejto aplikácii prekročenie zásobníka založeného na zásobníku. Toto prekročenie by potenciálne mohlo umožniť škodlivému používateľovi získať kontrolu nad touto aplikáciou.

Posledný hovor v zásobníku:

LAST_CONTROL_TRANSFER: od fffff8040117d6a9 do fffff8040116b0a0

Zásobník hovorov v čase zlyhania:

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'000000000000000000000000000000 00000000'000000 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'0000000000000000''0cf1380: 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

Časť kódu, v ktorej sa vyskytla chyba:

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

Názov modulu v tabuľke objektov jadra. Ak analyzátor dokázal zistiť problémový ovládač, názov sa zobrazí v poliach MODULE_NAME a IMAGE_NAME:

MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe

Ak kliknete na odkaz na modul (nt), zobrazia sa podrobné informácie o ceste a ďalších vlastnostiach modulu. Vyhľadajte určený súbor a prečítajte si jeho vlastnosti.

1: kd> lmvm nt
Prejdite celý zoznam modulov
Načítaný súbor so symbolom obrázka: ntkrnlmp.exe
Súbor mapovanej pamäte: C: \ ProgramData \ dbg \ sym \ ntoskrnl.exe \ 5A9A2147787000 \ ntoskrnl.exe
Cesta obrázka: ntkrnlmp.exe
Názov fotografie: ntkrnlmp.exe
InternalName: ntkrnlmp.exe
OriginalFilename: ntkrnlmp.exe
ProductVersion: 6.3.9600.18946
FileVersion: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

Vo vyššie uvedenom príklade analýza poukázala na súbor jadra ntkrnlmp.exe. Keď analýza výpisu pamäte ukazuje na systémový ovládač (napríklad win32k.sys) alebo na súbor jadra (ako v našom príklade ntkrnlmp.exe), pravdepodobne tento súbor nie je príčinou problému. Často sa ukazuje, že problém spočíva v ovládači zariadenia, nastavení systému BIOS alebo zlyhaní hardvéru.

Ak ste videli, že BSOD bol spôsobený ovládačom tretej strany, jeho názov bude uvedený v hodnotách MODULE_NAME a IMAGE_NAME.

Napríklad:

Cesta k obrázku: \ SystemRoot \ system32 \ drivers \ cmudaxp.sys
Názov fotografie: cmudaxp.sys

Otvorte vlastnosti súboru ovládača a skontrolujte jeho verziu. Vo väčšine prípadov je problém s ovládačmi vyriešený ich aktualizáciou..