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

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

функции, возвращающие основные характеристики элементов

имя функции

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

long ItemSize (long ea)

возвращает расстояние до конца элемента (не его размер!)

long ItemEnd (long ea)

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

функции трассировки элементов

имя функции

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

long NextHead (long ea)

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

long NextHead (long ea, long maxea)

long PrevHead (long ea)

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

long PrevHead (long ea, long minea)

long NextNotTail (long ea)

возвращает линейный адрес следующей головы элемента или неопределенного байта

long PrevNotTail (long ea)

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

Long ItemSize(long ea)

В контекстной помощи IDA сообщается, что эта функция определяет размер элемента, как и следует из ее названия. На самом же деле она возвращает расстояние в байтах до конца элемента, что доказывает следующий эксперимент:

seg000:0000 aHelloIdaPro db 'Hello,IDA Pro!'

seg000:000E a1234 db '1234'

a) исходные данные

auto a,b;

a=SegByName("seg000");

for(b=0;b<0x12;b++)

Message(">ea:%X -%c-> %d\n",a+b,Byte(a+b),ItemSize(a+b));

b) скрипт, последовательно передающий функции различные адреса от начала объекта

>ea:1000 -H-> 14

>ea:1001 -e-> 13

>ea:1002 -l-> 12

>ea:1003 -l-> 11

>ea:1004 -o-> 10

>ea:1005 -,-> 9

>ea:1006 -I-> 8

>ea:1007 -D-> 7

>ea:1008 -A-> 6

>ea:1009 - -> 5

>ea:100A -P-> 4

>ea:100B -r-> 3

>ea:100C -o-> 2

>ea:100D -!-> 1

>ea:100E -1-> 4

>ea:100F -2-> 3

>ea:1010 -3-> 2

>ea:1011 -4-> 1

c) результат: функция ItemSize возвращает расстояние до конца объекта в байтах

Минимальное значение, возвращаемое функцией, равно единице. Это же значение возвращается при возникновении ошибки – если функции передать адрес, не принадлежащий ни одному элементу.

Альтернативная реализация функции ItemSize содержится в файле “kpnc.idc”, находящимся на диске, прилагаемом к этой книге. Ее исходный код приведен ниже (см. MyGetItemSize)

static MyGetItemHeadEA(ea)

{

if (GetFlags(ea) & FF_DATA) // голова

return ea;

if (GetFlags(ea) & FF_TAIL) // хвост

return PrevHead(ea,0);

// если не голова и не хвост - ошибка

return -1;

}

static MyGetItemSize(ea)

{

if (GetFlags(ea) & MS_CLS) // элемент?

return ItemEnd(ea) - MyGetItemHeadEA(ea);

return -1;

}

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

seg000:0000 aHelloIdaPro db 'Hello,IDA Pro!'

seg000:000E a1234 db '1234'

a) исходные данные

auto a,b;

a=SegByName("seg000");

for(b=0;b<0x12;b++)

Message(">ea:%X -%c-> %d\n",a+b,Byte(a+b),MyGetItemSize(a+b));

b) скрипт, последовательно передающий функции MyGetItemSize различные адреса от начала объекта

Замечание: перед исполнением скрипта файл “kpnc.idc” должен быть загружен в память. Это можно осуществить нажатием клавиши <F2>

>ea:1000 -H-> 15

>ea:1001 -e-> 15

>ea:1002 -l-> 15

>ea:1003 -l-> 15

>ea:1004 -o-> 15

>ea:1005 -,-> 15

>ea:1006 -I-> 15

>ea:1007 -D-> 15

>ea:1008 -A-> 15

>ea:1009 - -> 15

>ea:100A -P-> 15

>ea:100B -r-> 15

>ea:100C -o-> 15

>ea:100D -!-> 15

>ea:100E -1-> 5

>ea:100F -2-> 5

>ea:1010 -3-> 5

>ea:1011 -4-> 5

c) результат – корректное выполнение функции

??? #Верстальщику – Change Table

аргумент

пояснение

ea

линейный адрес, принадлежащий элементу

return

=return

Пояснения

!=0

расстояние до конца элемента в байтах (не его размер!)

==1

ошибка

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

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

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