Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #76, АПРЕЛЬ 2005 г.

Бравые помощники компилятора

Крис Касперски ака мыщъх

Хакер, номер #076, стр. 076-104-4


Маленькие программы транслируются автоматически, но в серьезных проектах над текстом, выданном CCrued'ом, приходится как следует поработать (то есть, CCrued не только "лечит" программы, по еще и портит!). Тем не менее, процесс "послеродовой" реабилитации защищенного листинга описан достаточно подробно, и разработчикам CCured'а удалось переварить исходные тексты Sendmail'a, Bind'a, Openssl, Apache и других приложений, потратив на каждое из них по несколько дней. Тем не менее, run-time контроль, реализованный в CCured, намного надежнее статического анализа.

Memwatch

Набор отладочных функций для определения ошибок распределения памяти, поставляющийся в исходных текстах. Состоит из заголовочного файла memwatch.h и ядра memwatch.с, написанных на ANSI C, что обеспечивает совместимость со всеми "нормальными" компиляторами и платформами (разработчики заявляют от поддержке: PC-lint 7.0k, Microsoft Visual C++ (как 16-, так и 32-разрядные версии), Microsoft C для DOS, SAS C для Amiga 500, GCC и некоторых других). Поддержка Си++ находится в зачаточном состоянии.

Стандартные функции распределения памяти (malloc, realloc, free) оборачиваются в отладочную обертку, отслеживающую утечки памяти, двойное освобождение указателей, обращение к неинициализированным указателям и выход за пределы выделенного блока памяти. Создается некоторое количество сторожевых блоков, отлавливающих "дикие" указатели, обращающиеся к невыделенным областям памяти. Все обнаруженные ошибки записываются в журнал. Макросы ASSET и VERIFY заменяются их продвинутыми версиями, вместо немедленного завершения сбойнувшей программы предлагающие пользователю стандартный набор действий: Abort-Retry-Ignore.

Платформенно-зависимая часть кода разработчиками не реализована и функции типа mwIsReadAddr/mwIsSafeAddr каждый вынужден дописывать самостоятельно. Другой серьезный недостаток — программа должна быть явным образом подготовлена для работы с Memwatch, что в ряде случаев неприемлемо. Многопоточность поддерживается лишь на рудиментом уровне, и когда она будет реализована в полном объеме — неизвестно.

Dmalloc - Debug Malloc Library

Отладочная версия библиотеки для работы с памятью, замещающая собой штатные функции языка Си: malloc, realloc, calloc, free и др. Вносить изменения в исходный код приложения при этом не требуется (хотя при желании проверки распределения памяти можно осуществлять и явно).

Сервис, предоставляемый dmalloc'ом, вполне стандартен для утилит этого класса: утечки памяти, выход за границы буферов, статистика и логгинг с указанием номеров строк и имени файла. При включении проверок на каждую операцию ужасно тормозит, так что для работы потребуется, по меньшей мере, Pentium-4/Prescott.

Назад на стр. 076-104-3  Содержание  Вперед на стр. 076-104-5