Зачем нам столько галоперидолу
Собственно главной целью всей процедуры под нейтральным названием "исследование IDA Pro 4.15" было создание программы, обладающей некоторыми дизассемблирующими свойствами (а точнее просто нагло использующей движок дизассемблера IDA.WLL), при этом работающей в НЕ ИНТЕРАКТИВНОМ режиме. Т.е. чтобы Вы были лишены сомнительного удовольствия постоянно жать какие-то кнопки и иметь возможность запускать какую-нибудь обработку в фоновом режиме. Что собственно мне почти удалось.
"Почти" - потому что оказалось, что IDA настолько ИНТЕРАКТИВНА, что это наложило неизгладимый отпечаток и на сам движок. А именно - вы должны задать при инициализации движка (функция init_kernel) callback функцию, которая ответственна за все - начиная от ведения автоанализа (дело в том, что поскольку IDA Pro работает также и в не многозадачных системах, в ней реализован очень остроумный способ фоновой обработки. Вашей callback функции при вызове с сообщением ui_setidle передается адрес функции, которую Вы должны периодически вызывать, когда Ваша оболочка занята бездельем. Соответственно все действия, требующие отложенной длительной обработки, накапливаются в очереди. Вот эта-то очередь понемногу и разгребается при каждом таком вызове. За подробностями обращайтесь к файлу заголовков из IDA SDK kernwin.hpp) и заканчивая показом диалога для задания опций при загрузке нового файла (реакцию на это сообщение ui_load_file я пока не реализовал, так что моя программа умеет работать пока только с готовыми дизассемблированными файлами). Для начала я написал простенькую программку, которая всего лишь печатает в файл адреса и имена всех функций. Зато ей не нужен вообще никакой интерфейс. Итак, как можно создавать программы, использующие движок дизассемблера от IDA Pro. Поместите мой пример (директорию proba) в подкаталог plugins каталога SDK IDA Pro. Поскольку мы будем собирать не plugin, а standalone .EXE, то нам потребуются и несколько отличные настройки линковщика, в частности не нужен больше .DEF файл и необходима линковка с standard C-runtime library c0x32 (это макрос C_STARTUP
в makefiles). Так что я создал модифицированный файл proba.mak на основе plugin.mak - его (а также файл common.inc) необходимо поместить в подкаталог plugins. После этого можете попробовать собрать этот фантазм. Свежесобранный исполнимый файл (с расширением .EXE, если Вы еще не верите в это) нужно поместить туда же, где обретаются все прочие исполнимые файлы от IDA Pro. Файл кстати называется, как Вы уже наверное могли догадаться, RPIda. Запускать так же как обычно Вы запускаете idaw, новые файлы создавать пока не умеет, зато с ранее дизассемблированными работает как часы. В общем, мечты идиотов иногда сбываются...