Problema comună de depanare este principiul de funcționare al depanatorului de kernel al sistemului de operare

Cum pot schimba programul de depanare implicit pe care sistemul de operare îl va folosi când crash?

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion AeDebug







Dacă vă uitați la cheia de registry AeDebug, puteți vedea că valoarea introdusă pentru parametrul Debugger arată exact ca șirul trecut la API-ul wsprintf:

drwtsn32 - p. - e. - g

unde - p este ID-ul procesului de accident și - e este valoarea descriptorului de eveniment prin care debuggerul trebuie să emită un beep atunci când ciclul său de depanare primește primul eveniment de ieșire de depanare din fir. Semnalul descriptorului de evenimente indică sistemului de operare că debuggerul a fost conectat cu succes.

Dacă este activată verificarea zonei dinamice de depanare, atunci aplicația va funcționa puțin mai lent, deoarece atunci când funcția HeapFree este apelată în aplicație, este necesar să verificați corectitudinea heapului. Lista 4-1 arată un exemplu de program care corupe memoria. Dacă acest program rulează sub debugger, este ușor de văzut că funcția DebugBreak este apelată de două ori (la primul apel la funcția HeapFree). Mai jos este rezultatul, care arată că au existat unele probleme cu lucrul cu zona de heap.

HEAP [Heaper. exe]: Blocul Heap la 00441E98 modificat la 00441EAA trecut

dimensiunea solicitată a

HEAP [Heaper. exe]: Adresa nevalidă specificată la

RtlFreeHeapt 440000, 441eaO)

Dacă acest program este executat în afara programului de depanare, acesta se termină fără a raporta nicio problemă.

Heap - "heap", zona de memorie alocată dinamic. - Trans.

Acest lucru este posibil, pentru că Nu numai debuggerii, ci și orice aplicație poate apela funcția HeapCreate. - Trans.







Puteți găsi acest set de instrumente pe CD-ul însoțitor. - Trans.

Acesta este modulul de pornire, o parte din care este funcția afișată în Lista 4-1. - Trans.

Multe opțiuni ale butoanelor Registry System și Kernel Mode din comutatorul Destinație din fereastra Global Flags sunt globale. Trebuie să fii foarte atent când le instalezi, deoarece pot avea un impact decisiv asupra performanței sistemului. Setarea comutatorului destinație la opțiunile fișierului imagine este mult mai sigură, deoarece toate setările afectează numai un modul (al cărui nume este indicat în câmpul Nume imagine fișier adiacent).

Problema comună de depanare este principiul de funcționare al depanatorului de kernel al sistemului de operare

// Creați zona de heap a sistemului de operare.

HANDLE hHeap = HeapCreate (0, 128, 0);

// Distribuie memoria pentru un bloc de 10 octeți în mărime.

LPVOID pMem = HeapAlloc (hHeap, 0,10);

// Scrieți 12 octeți într-un bloc de 10 octeți (depășirea zonei de heap).

memset (pMem, OxAC,

// Distribuie un nou bloc de 20 de octeți în mărime.

LPVOID pMem2 = HeapAlloc (hHeap, 0, 20);

// Scrie 1 octet la cel de-al doilea bloc.

char * pUnder = (char *) ((DWORD) pMem2 - 1);

// Eliberați primul bloc. Această trimitere la HeapFree va fi

// inițiați punctul de întrerupere în codul zonei heap-debug

HeapFree (hHeap, 0, pMem);

// Eliberați al doilea bloc. Rețineți că acest apel nu va fi

// raportați mesajele de eroare

HeapFree (hHeap, 0, pMem2);

// Eliberați blocul manechinului. Rețineți că acest apel nu va fi

// raportați mesajele de insuficiență

HeapFree (hHeap, O, (LPVOID) Ox1); HeapDestroy (hHeap);

Dacă setați aceleași steaguri ca în figura 4.1 și repetați execuția HEAPER. EXE, vor fi primite următoarele ieșiri:

PAGEHEAP: procesul 0x490 a creat heapul de depanare 00430000

(steaguri 0xl, 50, 25, 0, 0)

PAGEHEAP: procesul 0x490 a creat mormanul de depanare 00CF0000

(steaguri Oxl, 50, 25, 0, - 0)

PAGEHEAP: procesul 0x490 a creat heapul de depanare 01600000

(steaguri Oxl, 50, 25, 0, 0)

PAGEHEAP: A fost detectată corupția de umplere a coapsei:

Alocarea la 0x01606FF0

Dimensiunea solicitată 0x0000000A

Dimensiune alocată 0x00000010

Corupția la Ox01606FFA

PAGEHEAP: Încercați blocul de referință care nu este alocat

Conținutul listei explică numele pavilionului stabilit de panoul Global Flags.







Articole similare

Trimiteți-le prietenilor: