На этом шаге мы рассмотрим основные возможности дизассемблера IDA PRO.
Это один из самых мощных дизассемблеров. Работая над текстом дизассемблируемой программы, вы можете называть своими именами метки и процедуры, давать свои комментарии так, что дизассемблированный текст становится в конце концов ясным и понятным. Имена и комментарии сохраняются в отдельном файле и при последующем запуске, естественно, восстанавливаются. Внешний вид дизассемблера IDA PRO показан на рисунке 1.
Рис.1. Пример дизассемблированной программы
Рассмотрим некоторые возможности этого дизассемблера.
При помощи комбинации клавиш Shift+Insert, Insert, а также пунктов меню Edit в любом месте программы можно записать комментарий. Комментарий, как и введенные названия меток, запоминается в отдельном файле. В комментарии может присутствовать адрес строки программы или имя метки. Если сделать двойной щелчок мышью по адресу или метке, то мы как раз и очутимся на этом месте.
Рис.2. Дизассемблированные данные
// // This example shows how to get list of functions. // #include <idc.idc> static main() { auto ea,x; for ( ea=NextFunction(0); ea != BADADDR; ea=NextFunction(ea) ) { Message("Function at %08lX: %s",ea,GetFunctionName(ea)); x = GetFunctionFlags(ea); if ( x & FUNC_NORET ) Message(" Noret"); if ( x & FUNC_FAR ) Message(" Far"); Message("\n"); } ea = ChooseFunction("Please choose a function"); Message("The user chose function at %08lX\n",ea); }
Прокомментируем приведенную программу. Как легко догадаться, организация цикла и условные конструкции имеют в точности тот же синтаксис, что и в языке С. Главное здесь - понять смысл используемых библиотечных функций. Легко видеть, что функция Message просто выводит строку в окно сообщений, которое находится под основным окном. Функция ChooseFunction вызывает окно, которое вызывается также из меню Jump to Function. Функция GetFunctionFlags возвращает информацию об указанной дизассемблированной функции. Наконец функция NextFunction осуществляет переход на следующую дизассемблированную функцию, возвращая также ее адрес. Аргументом функции NextFunction является адрес дизассемблированной функции, от которой осуществляется переход на следующую дизассемблированную функцию.
Программа IDA PRO осуществляст дизассемблирование модулей самых различных форматов: OBJ, EXE, DLL, VXD, ZIP, NLM и др.
Функциональность IDA PRO может быть значительно усилена посредством подключаемых модулей - plugin. Подключаемые модули пишутся на языке C++ и имеют структуру РЕ-модулей. Подключение модулей осуществляется через горячие клавиши или через пункты меню Edit | Plugins. Подключаемые модули находятся в специальном каталоге Plugins, где находится и файл конфигурации, где указаны эти модули.
Еще одна приятная особенность дизассемблера - он создает ассемблерный файл, с которым затем можно работать уже в текстовом режиме.
Со следующего шага мы начнем знакомиться с отладчиком Turbo Debugger.