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).
// 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.