Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Язык скриптов ida Си

IDA поддерживает Си-подобный скрип-язык, в целом напоминающий Си Керигана и Ричи, но значительно упрощенный, не поддерживающий типов, массивов, указателей и в том числе не обладающий возможностью отладки приложений. Язык скриптов изначально задумывался как средство выполнения простейших операций, укладывающихся в десяток-другой строк кода, а для «серьезных» задач предусмотрен механизм плагинов – внешних модулей, написанных на Borland C++ или Microsoft Visual C++ и подключаемых к IDA по мере необходимости. Впрочем, в подавляющем большинстве случаев нет никакой нужды прибегать к плагинам и вполне можно обойтись встроенным скрипт-языком.

Ниже приводится краткое описание языка скриптов IDA Си, рассчитанное на читателя знакомого и владеющего «классическим» Си.

Консоль

Простейшие скрипты могут быть набраны «не отходя от кассы» в диалоге, вызываемом нажатием <Shif-F2>, в дальнейшем именуемым консолью. Достоинство этого метода – оперативность, а недостатки - жесткое ограничение максимально допустимого размера вводимого текста (порядка одного килобайта) и невозможность работать более чем с одним скрипом одновременно.

Более сложные скрипты как правило создаются в отдельном файле, загружаемый нажатием <F2> или заданием ключа “-Sfilename” в командной строке, причем между “-S” и именем файла не должно присутствовать символа пробела.

Результаты работы скрипта (и служебные сообщения самой IDA) выводятся в специальную область экрана, напоминающую собой бесконечную телетайпную ленту, условно именуемую «консолью». Поскольку одна консоль связана с вводом (исходного текста скрипта), а другая с выводом (результатов работы), никакого противоречия не возникает и по контексту легко понять о какой именно консоли идет речь.

Рисунок 11 0x017 IDAC: Область вывода результатов работы скрипта «консоль»

Рисунок 12 0x018 IDAG: Область вывода результатов работы скрипта «консоль»

Функции, объявление функций, аргументы функции, возвращаемое значение

IDA поддерживает функции двух типов – встроенные (build-in) функции и функции, определяемые пользователем. Объявление пользовательских функций происходит следующим образом – перед именем функции указывается ключевое слово “static”, а за именем в круглых скобках через запятую перечисляются аргументы (если они есть) без указания их типа, например, так:

static MyFunc() static MyOtherFunc(x,y,s0)

{ {

// тело функции; // тело функции;

} }

Ограничения: максимально допустимая длина имени функции равна 16 символам; возможность организовывать вложенные функции отсутствует.

Консоль не поддерживает объявления функций, сообщая при этом о синтаксической ошибке, функции могут быть объявлены только в idc-файлах.

Все функции, объявленные как “static” (т.е. все функции вообще, поскольку, локальные функции IDA не поддерживает) будучи однажды загруженными, резидентно остаются в памяти на протяжении всего сеанса работа с дизассемблером и в любой момент доступны для вызова из консоли или других программ.

Например, если создать idc-файл следующего содержания: «static Demo(s0) {Warning(s0);}», загрузить его нажатием <F2>, нажать <Shift-F2> для вызова консоли и набрать нечто наподобие “Demo(“Hello, IDA!”);” появится диалоговое окно, выводящее указанную строку на экран.

static-функции не могут быть выгружены из памяти, но могут перекрываться повторным объявлением. Встроенные в IDA функции перекрыть нельзя.

Если в тексте скрипта объявлена функция main(), она автоматически выполняется при его загрузке.

Возврат значения функции осуществляется посредством “return” с последующим указанием имени переменной или константы, например, так:

static MyFunc(x,y) staic MyOtherFunc()

{ {

return x-y; return “Hello, IDA Pro\\n”;

} }

Пустой “return”, равно как и его отсутствие, возвращает нулевое значение (пустую строку).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]