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

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

long GetHashLong(long id,char idx);

char GetHashString(long id,char idx);

Не смотря на то, что эти функции работают непосредственно с массивом созданным CreateArray они не могу видеть или модифицировать элементы, заданные SetArrayLong\SetArrayString, поэтому можно безбоязненно использовать один массив для разных нужд.

Удалить любой элемент ассоциативного массива можно с помощью функции:

success DelHashElement(long id,char idx);

При удалении элементов IDA неявно инициализирует случайным значением, в отличие от DelArrayElement, которая в этом случае как и следует ожидать обнуляет ячейку.

Однако, это не вызовет проблемы, если для доступа к элементам использовать функции:

char GetFirstHashKey(long id);

char GetNextHashKey(long id,char idx);

char GetLastHashKey(long id);

char GetPrevHashKey(long id,char idx);

Все они возвращают строковое представление индексов, и могут быть использованы в функциях GetHashLong\GetHashString.

МЕТОДЫ

Функция

Назначение

long CreateArray(char name)

Создает новый массив

long GetArrayId(char name)

Возвращает идентификатор массива по его имени

success RenameArray(long id,char newname)

Переименовывает массив

void DeleteArray(long id)

Удаляет массив

success SetArrayLong(long id,long idx,long value)

Присваивает значение индексу массива типа «длинное целое»

success SetArrayString(long id,long idx,char str)

Присваивает значение индексу массива типа «строка»

char or long GetArrayElement(long

Возвращает значения обоих типов



tag,long id,long idx

элементов

success DelArrayElement(long tag,long id,long idx)

Удаляет один элемент массива

long GetFirstIndex(long tag,long id);

Возвращает индекс первого элемента

long GetLastIndex(long tag,long id);

Возвращает индекс последнего элемента

long GetNextIndex(long tag,long id,long idx)

Возвращает следующий индекс элемента массива

long GetPrevIndex(long tag,long id,long idx)

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

success SetHashLong(long id,char idx,long value

Присваивает значение элементу массива типа «длинное целое»

success SetHashString(long id,char idx,char value);

Присваивает значение элементу массива типа «строка»

long GetHashLong(long id,char idx)

Возвращает значение элемента типа «длинное целое»

char GetHashString(long id,char

idx)

Возвращает значение элемента типа «строка»

success DelHashElement(long id,char

idx)

Удаляет элемент ассоциативного массива

char GetFirstHashKey(long id)

Возвращает индекс первого элемента массива

char GetLastHashKey(long id)

Возвращает индекс последнего элемента массива

char GetNextHashKey(long id,char

idx)

Возвращает индекс следующего элемента массива

char GetPrevHashKey(long id,char idx);

Возвращает индекс предыдущего элемента массива

long CreateArray(char name);

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

Массив сохраняется в базе IDA как элемент Btree до тех пор, пока не будет принудительно удален из нее. Никаких ограничений на размер массива не налагается.

Каждый массив должен иметь свое уникальное имя (два массива с одинаковыми именами существовать не могут). Массивы имеют собственное пространство имен (то есть



можно создать метку или сегмент совпадающую с именем уже существующего массива и наоборот)

На имена наложены следующие ограничения - длина до 120 символов, может начинаться с цифры, но не должен содержать пробелов.

При успешном завершении функция возвращает идентификатор массива, в противном случае (массив с таким именем уже существует?) BADADDR.

Пример:

Message("0x%X \n", CreateArray("MyArray")

0xFF000041

Операнд

Пояснения

name

Имя массива

==return

Пояснения

Return

!=BADADDR

Идентификатор массива

Ошибка

long GetArrayId(char name);

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

Например:

Message("0x%X \n", CreateArray("MyArray")

Message("0x%X \n" GetArrayId("MyArray")

DeleteArray( GetArrayId("MyArray")

Message("0x%X \n" GetArrayId("MyArray")

0xFF000041 0xFF000041 0xFFFFFFFF

Операнд

Пояснения

name

Имя массива

==return

Пояснения

Return

!=BADADDR

Идентификатор массива

Ошибка



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