Отладка приложений


Проверка динамических областей памяти в Windows 2000 - часть 2


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

Что вполне возможно, т. к. не только отладчики, но и любые приложения могут вызывать функцию HeapCreate. — Пер.

 Этот набор инструментов вы можете найти на сопровождающем CD. — Пер.

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

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

Рис. 4.1. Вывод программы GFLAGS.EXE

Листинг 4-1. Пример разрушения heap-области Windows 2000 

void main(void)

// Создать heap-область операционной системы. 

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

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

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

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

 memset ( pMem, OxAC, 12);

// Распределить новый блок размером 20 байт. 

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

// Записать 1 байт во второй блок.

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

*pUnder = 'P';

// Освободить первый блок. Это обращение к HeapFree будет

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

 // операционной системы.

 HeapFree ( hHeap, 0, pMem);

// Освободить второй блок. Заметим, что этот вызов не будет

 // выдавать соообщения о неполадке

 HeapFree ( hHeap, 0, pMem2);

// Освободить фиктивный блок. Заметим, что этот вызов не будет

 // выдавать сообщения о неполадке

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

}

Если установить те же флажки, что на рис. 4.1, и повторить выполнение HEAPER.EXE, то будет получен следующий, более многословный вывод:




Начало  Назад  Вперед



Книжный магазин