A közös hibakeresési probléma az operációs rendszer kernel hibakeresőjének működési elve

Hogyan változtathatom meg az alapértelmezett hibakeresőt, amelyet az operációs rendszer összeomlik?

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion AeDebug

Ha megnézzük az AeDebug rendszerleíró kulcsot, láthatjuk, hogy a Debugger paraméterhez megadott érték megegyezik a wsprintf API-val átadott karakterlánccal:

drwtsn32 - p. - e. - g

ahol - p az összeomlási folyamat azonosítója, és - e az eseményleíró cím értéke, amellyel a debuggernek csipognia kell, amikor a debugciklus megkapja az első debug kilépési eseményt a szálból. Az eseményleíró jel azt jelzi az operációs rendszer számára, hogy a debugger sikeresen csatlakozik.

Ha a dinamikus területellenőrzés hibakeresése engedélyezett, akkor az alkalmazás lassabban fut le, mert ha a HeapFree funkciót az alkalmazásban hívják, ellenőrizni kell a heap helyességét. A 4-1. Lista példát mutat egy olyan programra, amely megrontja a memóriát. Ha ez a program a debugger alatt fut, könnyű észrevenni, hogy a DebugBreak függvény kétszer kerül hívásra (a HeapFree funkció első hívásakor). Az alábbiakban látható a kimenet, ami azt mutatja, hogy vannak problémák a heap-területen.

HEAP [Heaper. exe]: A 00441E98 00441EAA múltban módosított 00441E98 heap blokk

kért méret a

HEAP [Heaper. exe]: Érvénytelen cím megadva a következőhöz:

RtlFreeHeapt 440000, 441eaO)

Ha ezt a programot a hibakeresőn kívül hajtja végre, akkor a probléma bejelentése nélkül fejeződik be.

Heap - "heap", a dinamikusan elkülönített memória területe. - transz.

Ez eléggé lehetséges, mert Nem csak a hibakeresõk, hanem bármely alkalmazás hívhatja a HeapCreate funkciót. - transz.

A hangszereket megtalálhatja a mellékelt CD-n. - transz.

Ez a boot modul, amely része a 4-1. - transz.

A globális zászlók ablakának rendeltetési kapcsolójának Rendszerleíró és Kernel mód gombjai számos opciót tartalmaznak. Különösen óvatosnak kell lenni a telepítéskor, mert döntő hatással lehet a rendszer teljesítményére. A célkapcsoló beállítása képfájl-beállításokra sokkal biztonságosabb, mivel az összes beállítás csak egy modulra vonatkozik (amelynek neve a szomszédos Képfájl neve mezőben szerepel).

A közös hibakeresési probléma az operációs rendszer kernel hibakeresőjének működési elve

// Hozzon létre az operációs rendszer heap területét.

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

// Adja meg a memóriát 10 bájt méretű blokkhoz.

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

// Írjon 12 byte-ot egy 10 bájtos blokkhoz (heap-area overflow).

memset (pMem, OxAC,

// Küldje el egy 20 bájt méretű blokkot.

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

// Írjunk 1 byte-ot a második mondathoz.

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

// Engedje el az első blokkot. Ez a hivatkozás a HeapFree-ra lesz

// indítsa el a töréspontot a debug heap-terület kódjában

HeapFree (hHeap, 0, pMem);

// Engedje el a második blokkot. Ne feledje, hogy ez a hívás nem lesz

// jelentési hibaüzenetek

HeapFree (hHeap, 0, pMem2);

// Engedje el a dummy blokkot. Ne feledje, hogy ez a hívás nem lesz

// jelentési hibaüzenetek

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

Ha ugyanazokat a zászlókat állítja be, mint a 4.1. Ábrán, és ismételje meg a HEAPER végrehajtását. EXE, a következő, több verbose output érkezik:

PAGEHEAP: 0x490 folyamat létrehozott hibakereső kupacot 00430000

(0xl, 50, 25, 0, 0 jelzők)

PAGEHEAP: 0x490 folyamat létrehozta a 00CF0000 hibakeresőt

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

PAGEHEAP: 0x490 folyamat létrehozott hibakereső kupacot 01600000

(Oxl flag, 50, 25, 0, 0)

PAGEHEAP: Tail fill-korrekció észlelt:

Allocation at 0x01606FF0

Kért méret 0x0000000A

Allocated size 0x00000010

Korrupció az Ox01606FFA-nál

PAGEHEAP: Megpróbálja hivatkozni a nem hozzárendelt blokkra

A lista tartalma magyarázza a Global Flags panelen megjelölt zászlók nevét.

Kapcsolódó cikkek