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

Char GetPrevHashKey(long id,char idx);

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

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

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

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

Это дает возможность отказаться от вызовов GetLastHashKey, поскольку GetNextHashKey(,-1) будет его полным эквивалентом.

Например:

auto a,b;

b=-1;

DeleteArray(GetArrayId("MyArray"));

a=CreateArray("MyArray");

SetHashLong(a,"Ivanov",0x66);

SetHashLong(a,"Cheputilo",0x77);

SetHashLong(a,"Alushta",0x67);

for(;;){

b=GetPrevHashKey(a,b);

if (b=="") break;

Message("%s \n",b);}

DeleteArray(a);

Ivanov

Cheputilo

Alushta

Операнд

Пояснения

Id

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

idx

Индекс массива (строковой!)

Return

==return

Пояснения

!=””

Очередной индекс массива

==””

Ошибка

Операции с глобальными настройками методы

Функция

Назначение

long GetLongPrm (long offset)

Возвращает длинный целый параметр

long GetShortPrm(long offset);

Возвращает короткий целый параметр

long GetCharPrm (long offset)

Возвращает байтовый параметр

success SetLongPrm (long offset,long value);

Задает длинный целый параметр

success SetShortPrm(long offset,long value);

Задает короткий целый параметр

success SetCharPrm (long offset,long value);

Задает байтовый параметр

success SetPrcsr (char processor);

Задет тип процессора для дизассемблирования

long Batch (long batch);

Устанавливает или снимает пакетный режим работы

char GetIdaDirectory ()

Возвращает путь к директории, в которой расположена IDA

char GetInputFile ()

Возвращает имя дизассемблируемого файла

long GetLongPrm (long offset);

long GetShortPrm(long offset);

long GetCharPrm (long offset);

success SetLongPrm (long offset,long value);

success SetShortPrm(long offset,long value);

success SetCharPrm (long offset,long value);

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

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

Три функции чтения GetLongPrm, GetShortPrm, GetCharPrm отличаются только возвращаемым значением. Первая возвращает длинное целое, вторая короткое целое и последняя строку.

В каком-то смысле все они взаимозаменяемы. Т.е. можно использовать GetLongPrm для чтения короткого целого, если потом «врачую» маскировать старшие биты возращенного значения.

Обратите внимание, что GetCharPrm возвращает не строку, оканчивающуюся нулем, а только один байт.

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

‘offset’ это смещение внутри структуры, в которой IDA и хранит настойки. Ниже это будет подробно описано. А пока обратим внимание на то, что IDA не запрещает передавать функции произвольное смещение внутри структуры.

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

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