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

Сводная таблица функций

??? #Верстальщику ChangeTable

функции возвращающие значение ячейки виртуальной памяти

имя функции

краткое описание

long Byte(long ea)

возвращает содержимое ячейки виртуальной памяти, расположенной по адресу ea

long Word(long ea)

возвращает содержимое ячеек виртуальной памяти, расположенных по адресам ea и ea+1, располагая их в младшем и старшем байте машинного слова соответственно.

long Dword(long ea)

возвращает содержимое ячеек виртуальной памяти, расположенных по адресам ea, ea+1, ea+2 и ea+3, располагая их в младших и старших байтах младшего и старшего слова соответственно

функции модифицирующие значение ячейки виртуальной памяти

имя функции

краткое описание

void PatchByte(long ea,long value)

записывает в ячейку виртуальной памяти, расположенную по адресу ea, значение value

void PatchWord(long ea,long value)

записывает в ячейки виртуальной памяти, расположенные по адресам ea и ea+1, младший и старший байт значения value соответственно

void PatchDword(long ea,long value)

записывает в ячейки виртуальной памяти, расположенные по адресам ea, ea+1, ea+2 и ea+3 младшие и старшие байты младшего и старшего слова соответственно

функции трассирующие адреса виртуальной памяти

имя функции

краткое описание

long NextAddr(long ea)

возвращает следующий линейный адрес, если он существует, в противном случае - ошибку

long PrevAddr(long ea)

возвращает предыдущий линейный адрес, если он существует, в противном случае – ошибку

функции поиска

имя функции

краткое описание

long FindBinary(long ea,long flag,char str)

функции, манипулирующие с флагами

имя функции

краткое описание

long GetFlags (long ea)

возращает значение флагов виртуальной памяти

long SetFlags(long ea, long flags)

задает новые значения флагов виртуальной памяти

Long Byte (long ea)

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

Поэтому, до вызова функции Byte следует убедиться, что ячейка действительно существует и имеет определенное значение. Проверить это можно, проанализировав младший бит поля атрибутов, определенный в файле <idc.idc> константой FF_INV, - если он не равен нулю, то все о’кей:

if (FF_INV & GetFlags(ea))) value=Byte(ea);

else // ячейка не существует или имеет неиницилизированное значение

В файле <idc.idc> определены два макроса hasValue(F) и isLoaded(ea), выполняющие такие проверки. Макрос hasValue(F) ожидает флаг виртуальной памяти, а isLoaded(ea) линейный адрес ячейки, т.е.:

if(hasValue(GetFlags(ea))) value=Byte(ea);

else //ячейка не существует или имеет неиницилизированное значение

if(isLoaded(ea)) value=Byte(ea);

else //ячейка не существует или имеет неиницилизированное значение

Альтернативой функции Byte служит вызов GetFlags с последующей маскировкой старших 24-бит, содержащих поле атрибутов. Маской может служить определенная в файле <idc.idc> константа MS_VAL или непосредственное значение – 0xFF. Это может выглядеть так: value = (MS_VAL & GetFlags(ea)).

Для увеличения производительности скрипта можно использовать макрос byteValue(F), определенный в файле <idc.idc>, передавая ему значение флагов, ранее полученное для выполнения проверки существования ячейки:”F=GetFlags(ea); if (hasValue(F)) value=byteValue(F);” – это позволяет избавиться от вызова функции Byte, экономя тем самым некоторое количество процессорного времени.

Замечание: если читаемые ячейки заведомо существуют и гарантированно содержат инициализированные значения, в дополнительных проверках никакой необходимости нет и использование макроса byteValue будет ничуть не быстрее вызова функции Byte

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

0:00010000 db 48h ; H

0:00010001 db 65h ; e

0:00010002 db 6Ch ; l

0:00010003 db 6Ch ; l

0:00010004 db 6Fh ; o

0:00010005 db 2Ch ; ,

0:00010006 db 20h ;

0:00010007 db 49h ; I

0:00010008 db 44h ; D

0:00010009 db 41h ; A

0:0001000A db 20h ;

0:0001000B db 50h ; P

0:0001000C db 72h ; r

0:0001000D db 6Fh ; o

0:0001000E db 21h ; !

0:0001000F db 20h ;

0:00010010 db 0Dh ;

0:00010011 db 0Ah ;

a) исходные данные – требуется вывести на консоль содержимое отображаемых ячеек памяти

auto a;

Message(“>”);

for (a=0x10000;a<0x10011;a++)

Message("%c",Byte(a));

Message("\n");

b) последовательный вызов Byte для каждой ячейки

> Hello, IDA Pro!

c) результат

Другие примеры использования функции Byte можно найти в главе «Первые шаги с IDA Pro» и в файле “memcpy.idc”, входящим в комплект поставки IDA.

??? #Верстальщику – change table

аргумент

пояснения

ea

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

return

=return

пояснения

==

содержимое байта ячейки виртуальной памяти

==0xFF

ошибка

Родственные функции: Word, Dword

Интерактивный аналог: нет

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