Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 [ 108 ] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140


Message ("%x \n", SelStart ()

10B52

Return

==return

Пояснения

!=BADADDR

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

==BADADDR

Ошибка

Long SelEnd ();

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


Message ("%x \n", SelEnd ()

10B53

Return

==return

Пояснения

!=BADADDR

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

==BADADDR

Ошибка

success Jump (long ea);

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

адресу.

операнд

Пояснение

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

==return

Пояснения

Return

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

Ошибка



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

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

whi1e(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 I Символьное имя функции. Например, MyFunc.



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

Определение

константа

назначение

IDCHK OK

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

IDCHK ARG

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

IDCHK KEY

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

IDCHK MAX

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

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

static MyFunc() {

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

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

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

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

success DelHotkey(char hotkey);

Функция удаляет заданные пользователем "горячие клавиши". При попытке удаления системной или несуществующей комбинации функция возвратит ошибку. Операнд hotkey был рассмотрен в описании функции AddHotKey.

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

DelHotkey ("Alt-A");

Операнд назначение

Hotkey

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

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

Return

==return Пояснения

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

==0 Ошибка

МАРКИРОВКА ПОЗИЦИЙ ДЛЯ БЫСТРОГО ПЕРЕМЕЩЕНИЯ

МЕТОДЫ

Функция

Назначение



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 [ 108 ] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140