Практически в каждой современной интегрированной среде разработки для Windows присутствует отладчик. Ничего удивительного здесь нет - половину своей профессиональной жизни программист проводит в отладке, поэтому производители сред разработки - коммерческих или бесплатных - снабжают свою продукцию этими немаловажными инструментами. Однако до сих пор не вымерли и отдельно стоящие, не зависящие ни от какой среды отладчики. Яркий пример тому - "герой" данной статьи отладчик OllyDbg.
Сайт программы располагается по адресу www.ollydbg.de. Размер дистрибутива OllyDbg достаточно невелик, особенно если посмотреть на возможности этого отладчика. А возможности достаточно неплохие, и, думаю, прочитав эту статью до конца, вы со мной согласитесь.
Возможности
Во-первых, серьёзным плюсом является графический пользовательский интерфейс - то есть программа обладает полноценными окнами, с которыми мы привыкли работать в Windows. На первый взгляд, это может показаться смешным, но на самом-то деле далеко не все отладчики до сих пор обзавелись полноценным графическим интерфейсом. Не знаю, конечно, как вам, но мне приятнее и удобнее работать с программой, имеющей графический интерфейс, нежели с той, которая имеет DOS-подобный консольный. Конечно, в ряде случаев последний предпочтительнее, но таких случаев всё же меньшинство. Причём стоит отметить, что настроек интерфейса в OllyDbg очень много, так что "под себя" подогнать можно цвет фона, шрифты, а также многое другое.
Второй немаловажный параметр, характеризующий отладчики, - поддерживаемые процессорные архитектуры и расширения. Что это значит? Это значит, что старый отладчик может не справиться с новой программой, потому что не будет знать всех команд процессора, которые эта программа использует. OllyDbg в этом плане не бежит впереди планеты всей, но поддерживает множество широко используемых фирмами Intel и AMD технологий: MMX, 3DNow!, Athlon extensions, SSE.
Поддерживаются форматы отладочной информации Microsoft (COFF) и Borland (OMF). Дампы памяти можно также выводить в разных форматах: шестнадцатеричном, текстовом (в кодировках ANSI или Unicode), в виде адресов памяти, а также в некоторых других, менее распространённых форматах.
Приятной особенностью является возможность отладки динамически компонуемых библиотек (DLL). Отладчик сам запускает вызывающее функции из DLL приложения и отслеживает все вызовы библиотеки. Причём если функции экспортируются не в именованном виде, а в индексном (ordinal), то OllyDbg восстанавливает вид функции по передаваемым ей параметрам. Кстати, отладчик умеет не только запускать приложения под своим надзором, но и присоединяться к уже запущенным. Отлаживать можно не только простые, но и многопоточные приложения. Причём с потоками в OllyDbg можно работать достаточно полно: добавлять или удалять потоки, переключаться с одного на другой. Каждый поток отлаживается в своём собственном окне, так что путаницы и мешанины, по идее, не возникает.
Встроенный в OllyDbg анализатор - наиболее значимая, по словам разработчиков, часть их детища. Анализатор распознаёт в отлаживаемой программе циклы, условные переходы, а также константы и строки, внедрённые программистом прямо в код программы, "хитроумные" конструкции (которыми особенно славятся C-программисты), вызовы API-функций, импортируемые функции и прочее. Анализатор делает двоичный код более читабельным, облегчает отладку, уменьшает вероятность неправильного дизассемблирования. При этом анализатор не ориентируется на какой-то один компилятор и может быть одинаково полезен при отладке любого 32-битного Windows-приложения. При распознавании функций анализатор для ускорения процесса использует таблицу, содержащую имена и аргументы более 2300 наиболее часто используемых функций стандартной библиотеки C и Windows API. Впрочем, таблицу можно самостоятельно пополнить.
Большие возможности программисту OllyDbg предоставляет в области поиска: можно искать одну процессорную команду или же целую их последовательность, константы, двоичную или текстовую последовательность байтов. Можно задать поиск команд, соответствующих какому-то адресу или диапазону адресов памяти; поиск функций, которые вызывают какую-либо другую функцию, или обращаются к какому-то определённому модулю. Если в ходе поиска найдено несколько мест в программе, соответствующих заданным условиям поиска, OllyDbg выводит их полный список, позволяющий быстро переключаться между ними.
Отладчик следит за всеми окнами, которые создаёт приложение, и помещает их в список. Таким образом, можно следить за всеми сообщениями, которые получает от системы данное окно. Удобно организована работа со строковыми ресурсами, которые можно отслеживать и изменять, не отрываясь от процесса отладки. Работа с другими типами ресурсов более ограничена: их можно просматривать и изменять только в двоичном виде.
OllyDbg поддерживает работу со всеми возможными видами точек останова (breakpoints). В исключительных случаях можно задать вызов прерывания INT 3 для остановки выполнения приложения после каждой команды в отлаживаемом модуле. Кроме точек останова, поддерживается просмотр значений в регистрах и по конкретным адресам памяти. Помимо всего этого, в операционных системах на базе ядра Windows NT OllyDbg может отслеживать все дескрипторы (handles), используемые отлаживаемым приложением. Под Win9x этого делать он не умеет, зато там можно следить за размещёнными в куче блоками памяти.
Помимо непосредственно отладчика, в OllyDbg есть встроенный профилировщик - инструмент проверки скорости работы кода. Обычно этот инструмент предлагается отдельно от отладчика, однако подход, использованный разработчиком OllyDbg, мне кажется более разумным, поскольку профилировка и отладка часто неразделимы.
Интересной особенностью программы является поддержка работы с самораспаковывающимися архивами. Если в качестве отлаживаемого файла указать самораспаковывающийся архив с другим исполняемым файлом внутри, OllyDbg должен начать отладку не самораспаковщика, а того файла, который будет распакован им.
Также полезной и интересной особенностью OllyDbg является поддержка плагинов, которые подключаются к отладчику и расширяют его функциональность. В стандартную поставку входят плагины для работы с закладками и командной строкой. Впрочем, на сайте OllyDbg можно найти SDK (Software Development Kit - комплект для разработки программного обеспечения), с помощью которого можно создать свой плагин, реализующий недостающие возможности.
Сфера применения
Как я уже говорил, а вы, должно быть, и без меня знаете, в каждой современной среде разработки присутствует собственный отладчик. И, тем не менее, зачем-то же автор OllyDbg, некто Oleh Yuschuk, занялся разработкой отдельного отладчика и довёл её, разработку, до победного конца.
Дело, прежде всего, в том, что отладчик, встроенный в среду разработки, предназначен для отладки тех программ, которые созданы именно в этой среде. Такой отладчик специально "затачивается" под конкретный язык программирования и конкретный компилятор. И отладка в 99,9% случаев происходит при наличии у программиста исходного текста программы. OllyDbg одинаково подходит для всех Win32-приложений и предназначен, в основном, для отладки тех приложений, исходный текст которых отсутствует. По большому счёту, для такой отладки совсем даже и не нужно знать, на чём программа написана. Именно этой направленностью и объясняется присутствие в OllyDbg средств для изменения исполняемого файла.
Сама по себе задача отладки программы без исходных текстов может возникать в ряде случаев. Например, самый простой - когда тексты программы по причине банального разгильдяйства или атаки злобных вирусов были утеряны. Тогда, если остался более-менее стабильный исполняемый файл, можно завершить его отладку без исходных текстов и выпустить продукт в заданный срок. Как вариант первого случая, бывает, что в какой-то используемой программой DLL-библиотеке обнаруживаются баги, а исходный текст библиотеки недоступен. Либо, опять-таки, утерян, либо поставщик библиотеки, если она написана кем-то со стороны, просит за него слишком много денег. Тогда не остаётся ничего (особенно, если баги злобные, и появление новых версий библиотеки никоим образом не предвидится), кроме как отлаживать уже имеющийся на руках исполняемый файл.
Ну и, конечно, самый частый вариант отладки без исходного текста - это взлом. Формально это может считаться отладкой, поскольку для того, чтобы бороться с защитой коммерческой программы, нужно хорошо понимать, как эта защита работает. На разработчика тут надежды мало: вряд ли он расскажет взломщику, как оптимально быстро и качественно сломать защиту его собственной программы и лишить себя, любимого, честно заслуженных денег. И, хотя разработчик OllyDbg и просит в лицензионном соглашении не использовать этот отладчик в незаконных целях, вряд ли большинство взломщиков обратит на эти тщетные мольбы хоть какое-нибудь внимание. Тем более, некоторые возможности OllyDbg просто таки подарок для взломщика: например, работа с самораспаковщиками позволяет упростить взлом программ, защита которых основана на них. Конечно, нельзя утверждать, что OllyDbg пригодится только тем, кто будет использовать его незаконно, но, думаю, такие пользователи у этой программы имеются, и их не так уж и мало.
Тем не менее, я призываю всех, кто заинтересовался этим отладчиком, не использовать его в незаконных целях - максимум для исследования защиты программ с целью написания собственной качественной защиты.
Выводы/Резюме
В целом, конечно, OllyDbg нужен далеко не всем программистам и далеко не каждый день, однако бывают случаи, когда нужно выбирать отладчик, и именно тогда нужно вспомнить о плюсах OllyDbg. Хотя множество программистов во всём мире используют GNU Debugger (GDB), однако перед ним у OllyDbg есть преимущества.
Во-первых, это родной для Windows графический интерфейс. Хотя у GDB тоже есть приспособления для работы в оконном, а не консольном режиме, они, как правило, далеко не полностью реализуют функциональность консольной версии. Кроме того, поскольку GDB - вещь кроссплатформенная, есть проблемы с совместимостью с форматами отладочной информации Win32-компиляторов. Фактически, GBD идеально совместим только с GNU-компиляторами (то есть, для Windows это MinGW - Minimalist GNU for Windows). Кроме этого, ориентирован он на отладку программ, написанных на C/C++, поэтому им не так удобно отлаживать программы, написанные на других языках. OllyDbg не имеет таких минусов, о его основных возможностях я уже рассказал раньше. Так что, думаю, среди отдельно стоящих бесплатных отладчиков для Win32 OllyDbg - лучший.
Вадим СТАНКЕВИЧ
Комментарии
(http://en.wikipedia.org/wiki/SoftICE)
Ктати, еще можно обозреть дебаггер, встроенный в IDA.
А можно ли сравнить...
Ответы:
1. Нельзя
2. Можно
Кому верить?