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

Long GetEnumQty(void);

Функция возвращает число типов перечислений. Все они могут быть отображены вызовом списка командой меню ~ View \ Enumeration’s

FFFFFFFF ; enum enum_1

FFFFFFFF enum_1_0 = 1

FFFFFFFF enum_1_2 = 2

FFFFFFFF

FFFFFFFF ; ----------------------------

FFFFFFFF

FFFFFFFF ; enum enum_2

FFFFFFFF enum_2_0 = 16h

FFFFFFFF

Message(“0x%X \n”,

GetEnumQty()

);

0x2

Return

==return

Пояснения

!=0

Число перечислений

==0

Нет ни одного перечисления

Long GetnEnum(long idx);

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

В отличие от этого, идентификатор (ID) перечисления представляет собой уникальное 32-битное значение, всегда указывающие на одно и ту же перечисление. Более того, даже если перечисление, связанное с конкретным идентификатором, было удалено, гарантируется, что тот же идентификатор не будет выдан ни одному созданному после этого перечислению.

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

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

FFFFFFFF enum_1_0 = 1

FFFFFFFF enum_1_2 = 2

FFFFFFFF

FFFFFFFF ; -----------------------------

FFFFFFFF

FFFFFFFF ; enum enum_2

FFFFFFFF enum_2_0 = 16h

auto a;

for(a=0;a<GetEnumQty();a++)

Message(“0x%X 0x%X \n”,

a,GetEnumId(a)

);

0x0 0xFF0000F0

0x1 0xFF0000FE

Идентификатор, как и дескриптор, с точки зрения пользователя являются абстрактным «магическим» числом, интерпретировать которое допускается только операционной системе (в качестве которой выступает в данном случае IDA).

Операнд

Пояснения

index

Индекс перечисления в списке (от нуля до GetEnumQty()-1)

Return

==return

Пояснения

!=BADADDR

Идентификатор (ID) перечисления

==BADADDR

Ошибка

Long GetEnumIdx(long enum_id);

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

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

FFFFFFFF ; enum enum_1

FFFFFFFF enum_1_0 = 1

FFFFFFFF enum_1_2 = 2

FFFFFFFF

FFFFFFFF ; -----------------------

FFFFFFFF

FFFFFFFF ; enum enum_2

FFFFFFFF enum_2_0 = 16h

Message("0x%X \n",

GetEnumIdx(

GetEnum("enum_1")

)

);

0x0

Message("0x%X \n",

GetEnumIdx(

GetEnum("enum_2")

)

);

0x1

Операнд

Пояснения

ID

Идентификатор перечисления

Return

==return

Пояснения

!=BADADDR

Индекс перечисления

==BADADDR

Ошибка

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