Анимация
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

char atoa (long ea);

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

операнд

Пояснение

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

Return

==return

пояснения

!=""

Сегментный адрес в строковом представлении

==""

Ошибка

Так, например:

+-[ ]-----Name seg000

+ 1/1

--------------- Program Segmentation----------------------3-[П]- +

Start End Align Base Type Cls 32es Start EA End EA -

000000 000032EA byte 1000 pub CODE N FFFF 00010000 000132EA 0

Message("%s \n",

atoa(0x10000)

seg000:0

Если указанный адрес не принадлежит ни одному сегменту, то функция преобразует его к виду segment : offset, по стандартной формуле преобразования:

Например:

segment = ea >> 4; offset = ea - (ea >> 4).

Message("%s \n",

atoa(0x18)

1:00000008

char ltoa (long n,long radix);

Функция преобразовывает длинное целое в символьное с произвольной системой исчисления.

Функция принимает следующие операнды:

операнд

назначение

Задает операнд

==n Операнд



первый слева операнд

Втрой,третий и остальные

все операнды

radix

требуемая система исчисления.

ЗАМЕЧАНИЕ: В контекстной помощи IDA сообщается, что radix может принимать значения 2, 8, 10, 16. Однако это стандартная Си-функция, и она может принимать и другие значения, например, 3 или 11. Точнее, все кроме 0 и 1, а так же не более 24, при которых, независимо от аргумента, функция возвращает пустую строку.

Return

==return

пояснения

!=""

Сегментный адрес в строковом представлении

==""

Ошибка

Пример:

auto a;

for (a=0;a<50;a++) Message ("%x, %s \n",

ltoa(a,a));

0, 1, 2, 10 3, 10 4, 10 5, 10 6, 10 7, 10 8, 10 9, 10 a, 10

b, 10 c, 10 d, 10 e, 10 f, 10 10, 10 11, 10 12, 10 13, 10 14, 10 15, 10

16, 10 17, 10 18, 10 19, 10 1a, 10 1b, 10 1c, 10 1d, 10 1e, 10 1f, 10 20, 10

21, 10 22, 10 23, 10 24, 10 25, 26, 27, 28, 29, 2a, 2b,

2c, 2d, 2e, 2f, 30, 31,

long atol (char str);

Функция преобразует строковое десятичное значение в длинное целое. Постфикс h игнорирует, а, встретив префикс x, возвращает нулевое значение.

операнд

Пояснение

Строка, заканчивающаяся нулем

Return

==return

пояснения

длинное целое

Ошибка

Пример:

Message ("%x \n",

atol ("16")

РАЗНОЕ



char Compile (char filename);

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

Обычно так главный модуль скрипта подключает все остальные необходимые ему функции, находящиеся во внешних файлах. Обратите внимание, что Compile только компилирует, но не запускает функцию main(). Если модуль требует инициализации, то main придется вызвать вручную. Однако в компилируемом файле не должно содержаться функции, совпадающей по имени с текущей (то есть вызвавшей Compile). Иначе поведение дизассемблера окажется непредсказуемым. В остальных случаях совпадение имен откомпилированных функций приводит лишь к их замещению.

Заметим, что системные функции таким образом перекрыть не удастся и выдастся сообщение об ошибке. Любопытно, что Compile возвращает не код ошибки, а осмысленную символьную строку. В случае успеха операции - пустую. Пример:

demo.idc:

static MyFunc() {

}Message("He11o, Sailor! \n");

compl.idc

static mainC) {

Compi1eC"demo.idc") ; MyFuncC);

Загрузим и запустим на выполнение compl.idc На экране появиться Hello, Sailor!. Нетрудно убедиться, что функция MyFunc доступна и с консоли и с остальных скриптов.

Заметим, что IDA сложным образом манипулирует с понятием текущего каталога, поэтому если приведенный пример не сработает, попробуйте указать полный путь к файлу demo.idc

void Exit (long code);

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

Выполнение скрипта при этом прерывается. Закрытие активных файлов не гарантируется.

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

code

код завершения процесса



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