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

Long SelEnd ();

Возвращает линейный адрес первого байта за концом выделенной области. Если выделение отсутствует, то функция вернет ошибку BADADDR.

Пример использования:

Message (“%x \n”,

SelEnd ()

);

10B53

Return

==return

Пояснения

!=BADADDR

Линейный адрес следующего байта за концом выделенной области

==BADADDR

Ошибка

Success Jump (long ea);

Функция перемещает позицию курсора в окне дизассемблера IDA по требуемому адресу.

операнд

Пояснение

ea

32-разрядный линейный адрес

Return

==return

Пояснения

==1

Успешное завершение

==0

Ошибка

Очень активно используется в пользовательских скриптах. Однако имеет ряд тонкостей.

Прежде всего, экран обновляется не в момент выполнения функции, а только после завершения работы скрипта. Поэтому следующий пример не будет правильно выполняться:

while(1)

Jump(AskAddr(0x10000,"Введите адрес для перехода"));

Это не позволяет динамически иллюстрировать работу скрипта и заставляет изощряться в поиске решений, когда требуется интерактивное взаимодействие вместе с показом нужного кадра окна.

Приходится предусматривать временный выход и последующий вход из скрипта, благо это возможно. Достаточно лишь сохранять значения всех переменных в массиве или виртуальной памяти (ну для любителей экзотики или перестраховщиков - в файле). Но это все же концепция непривычная рядовому программисту.

Другим минусом является округление адреса перехода до целой строки.

Особенно это неудобно при переключении экрана в шестнадцатеричный режим. Jump не позволяет указывать на конкретный байт, а только на всю строку целиком.

При задании несуществующего адреса курсор не изменяет своей позиции, а функция возвращает ноль.

Void Wait ();

Функция ожидает конца авто анализа, после чего возвращает управление. Большинство скриптов не могут работать параллельно с фоновым дизассемблером по тем очевидным причинам, что ожидают полностью готовый к употреблению текст, а не динамически и непредсказуемо изменяющийся.

Авто анализ происходит при загрузке нового файла, а так же при выполнении некоторых операций с исследуемым текстом. В интерактивном режиме можно дождаться окончания авто анализа визуально, но в пакетном так не получится.

Для этого и служит эта функция. Хороший пример ее использования можно найти в файле 'analys.idc', поставляемом вместе с IDA.

Long AddHotkey(char hotkey, char idcfunc);

Функция задает новую комбинацию клавиш для вызова функции IDA, определенной пользователем. Это очень удобное средство для интеграции своих скриптов в интерфейсную оболочку IDA.

Операнд

назначение

Hotkey

Требуемая комбинация клавиш.

Записывается в виде символьной строки. Например, "Alt - A". Могут так же использоваться "Ctrl", "Shift", "Enter" а так же их комбинации.

idcfunc

Символьное имя функции. Например, 'MyFunc'.

В файле idc.idc содержатся следующие определения констант, связанных с возвращением значением этой функцией.

Определение

константа

назначение

IDCHK_OK

0

успешное завершение

IDCHK_ARG

-1

неверные аргументы

IDCHK_KEY

-2

ошибка в синтаксисе горячей клавиши

IDCHK_MAX

-3

задано слишком много горячих клавиш.

Создадим и откомпилируем для примера следующий файл:

static MyFunc()

{

Message("Hello, IDA! \n");

}

Введем с консоли 'AddHotkey("ALT-A","MyFunc");'. Если теперь нажать 'Alt-A', то на экране появиться приветствие ‘Hello, IDA!’.

Заметим, что перекрывать существующие клавиатурные комбинации можно совершенно безболезненно, за исключением того, что они автоматически не удаляются и ‘кушают’ при этом немного ресурсов, да и число "горячих клавиш" ограничено.

Поэтому ненужные в этом момент комбинации рекомендуется предварительно удалять функцией 'DelHotkey'.

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