Загальне питання налагодження - принцип роботи відладчика ядра операційної системи

Як змінити відладчик за замовчуванням, який буде використовувати операційна система при аварійному збої?

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion AeDebug

Якщо заглянути в розділ реєстру AeDebug, то можна побачити, що значення, яке введено для параметра Debugger, виглядає точно так само, як рядок, що передається в API-функцію wsprintf:

drwtsn32 - p. - e. - g

де - p - ідентифікатор (ID) процесу аварійного завершення, а - е - значення дескриптора події, за допомогою якого відладчик повинен просигналити, коли його цикл налагодження здобуде перше налагоджувальне подія виходу з потоку. Сигнал дескриптора події повідомляє операційній системі, що відладчик приєднаний успішно.

Якщо перевірка отладочной динамічної області включена, то додаток буде виконуватися трохи повільніше, тому що коли в додатку викликається функція HeapFree, то доводиться додатково перевіряти коректність "купи". У лістингу 4-1 показаний приклад програми, яка псує пам'ять. Якщо ця програма виконується під отладчиком, то неважко помітити, що функція DebugBreak викликається двічі (на першому ж виклику функції HeapFree). Нижче показаний висновок, за яким видно, що при роботі з heap-областю виникли деякі проблеми.

HEAP [Heaper. exe]: Heap block at 00441E98 modified at 00441EAA past

requested size of a

HEAP [Heaper. exe]: Invalid Address specified to

RtlFreeHeapt 440000, 441eaO)

Якщо ця програма виконується поза відладчика, то вона завершується без повідомлень про будь-які проблеми.

Heap - "купа", область динамічно розподіляє пам'яті. - Пер.

Що цілком можливо, тому що не тільки отладчики, але і будь-які додатки можуть викликати функцію HeapCreate. - Пер.

Цей набір інструментів ви можете знайти на супроводжує CD. - Пер.

Це завантажувальний модуль, частиною якого є функція, показана в лістингу 4-1. - Пер.

Багато опції кнопок System Registry і Kernel Mode перемикача Destination вікна Global Flags є глобальними. Потрібно виявляти особливу обережність при їх установці, тому що вони можуть вплинути на продуктивність системи. Установка перемикача Destination в положення Image File Options набагато безпечніше, бо все установки впливають лише на один модуль (ім'я якого зазначено в сусідньому полі Image File Name).

Загальне питання налагодження - принцип роботи відладчика ядра операційної системи

// Створити heap-область операційної системи.

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

// Розподілити пам'ять для блоку розміром в 10 байтів.

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

// Записати 12 байт в 10-байтовий блок (переповнення heap-області).

memset (pMem, OxAC,

// Розподілити новий блок розміром 20 байт.

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

// Записати 1 байт до другого блоку.

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

// Звільнити перший блок. Це звернення до HeapFree буде

// ініціювати точку переривання в коді отладочной heap-області

HeapFree (hHeap, 0, pMem);

// Звільнити другий блок. Зауважимо, що цей виклик не буде

// видавати соообщенія про неполадку

HeapFree (hHeap, 0, pMem2);

// Звільнити фіктивний блок. Зауважимо, що цей виклик не буде

// видавати повідомлення про неполадку

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

Якщо встановити ті ж прапорці, що на рис.4.1, і повторити виконання HEAPER. EXE, то буде отриманий наступний, більш багатослівний висновок:

PAGEHEAP: process 0x490 created debug heap 00430000

(Flags 0xl, 50, 25, 0, 0)

PAGEHEAP: process 0x490 created debug heap 00CF0000

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

PAGEHEAP: process 0x490 created debug heap 01600000

(Flags Oxl, 50, 25, 0, 0)

PAGEHEAP: Tail fill corruption detected:

Allocation at 0x01606FF0

Requested size 0x0000000A

Allocated size 0x00000010

Corruption at Ox01606FFA

PAGEHEAP: Attempt to reference block which is not allocated

Вміст лістингу пояснюють назви прапорців, встановлених панеллю Global Flags.

Схожі статті