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

Void Warning (char format,...);

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

<OK> или <ESC> просто возвращают управление скрипту; <Abort> приводит к аварийному выходу из IDA (правда перед этим у пользователя будет запрошено подтверждение). А <SILENT> включает «тихий» режим, в котором подобные окна не отображаются.

Warning (“Hello!”);

Ситуаций, в которых бы требовался аварийный выход из IDA очень немного. Между тем – эта функция вторая по популярности после Message. Очень часто она используется как простой информирующий диалог, не ожидающий от пользователя никакого выбора (например, так поступает демонстрационный плагин Strings)

Сравните приведенный выше пример с результатом демонстрации работы AskYN. Не правда ли “HELLO! – OK” вполне очевидно, тогда как “HELLO! YES? NO? CANCEL?” может вызвать легкое недоумение и растерянность.

К тому же Warning в отличие от AskYN, поддерживает стандартные спецификаторы форматированного вывода Си. (Подробнее смотри описание функции Message)

Но все же использование Warning по поводу и без повода – относится к «дурным» приемам программирования, которых следует по возможности избегать.

Void Fatal (char format,...);

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

Существует очень немного случаев, требующих применения столь «варварских» средств.

Fatal (“Hello”);

Функция поддерживает стандартные спецификаторы Си, которые подробнее были описаны в функции Message.

Long ScreenEa ();

Возвращает линейный адрес в текущей позиции курсора. Очень широко используется в скриптах, в том числе и приведенных в этой книге.

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

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

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

Message (“%x \n”,

ScreenEA ()

);

4010f7

Return

==return

Пояснения

!=BADADDR

Линейный адрес начала элемента в текущей позиции курсора

==BADADDR

Ошибка

Long SelStart ();

Возвращает линейный адрес начала выделенной области. Широко используется для работы с блоками и позволяет организовать взаимодействие между скриптом и пользователем.

Выделять можно только строки целиком и аналогично функции ScreenEA() можно узнать только адрес начала строки. Если выделение отсутствует, то возвращается ошибка (BADADDR).

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

Message (“%x \n”,

SelStart ()

);

10B52

Return

==return

Пояснения

!=BADADDR

Линейный адрес начала выделенной области

==BADADDR

Ошибка

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