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

Long Batch (long batch);

Функция позволяет устанавливать (или снимать) пакетный режим работы. При этом IDA не выводит никаких диалоговых окон и не выдает предупреждений. Это может быть полезным при автономной работе и во время выполнения скриптов.

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

==batch

Режим

0

Обычный режим

1

Пакетный режим

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

auto a,s;

s="нормальный";

a=Batch(0);

Batch(a);

if (a) s="пакетый";

Message("Режимм работы %s \n",s);

Режимм работы нормальный

Char GetIdaDirectory ();

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

Например:

Message (“%s \n”, GetIdaDirectory ());

D:\DEBUG\IDA384

Return

Пояснения

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

Точнее это путь к исполняемому файлу IDA.EXE (idaw.exe\ idax.exe). Расположение остальных файлов зависит от версии.

Так, например, IDA 3.6 хранила все скрипты в базовом каталоге, а последние версии в каталоге IDC.

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

Char GetInputFile ();

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

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

Message (“%s \n “,

GetInputFile ()

);

My File.exe

Return

Пояснения

Имя дизассемблируемого файла вместе с расширением

СТРОКИ

К сожалению, встроенный язык IDA не поддерживает даже основных конструкций Си для работы со стоками. Так, например, невозможно получить посимвольный доступ к стоке или указатель на нее же.

Зато IDA поддерживает инициализацию и контекцию, (слияние) строк, что демонстрирует следующий пример:

auto a,b;

a="Hello";

b="IDA! \n";

a=a+","+b;

Message("%s \n",a);

Hello,IDA!

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

Это определение длины строки (strlen), взятие подстроки (substr) и поиск подстроки (srtsrt). Возможность модификации строки отсутствует, и в том случае, когда возникает потребность изменить хотя бы один символ, приходится перестраивать всю строку целиком.

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

static setstr(str, pos, ch)

{

auto s0;

s0=substr(str,0,pos);

s0=s0+ch;

s0=s0+substr(str,pos+strlen(ch), strlen(str));

return s0;

}

static setstr(str, pos, ch)

{

auto s0;

s0=substr(str,0,pos);

s0=s0+ch;

s0=s0+substr(str,pos, strlen(str));

return s0;

}

Первая из них позволяет в строке str заместить любую подстроку ch с позиции pos, а вторая осуществляет вставку с «раздвижкой»

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

Message("%s \n",

setstr("Hello World!",5,",")

);

Hello, World!

Message("%s \n",

insstr("Hello, World!",7,"my ")

);

Hello, my World!

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

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

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