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

Long GetStrucId(long index);

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

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

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

0000 struc_1 struc

0000 field_0 db ?

0001 field_1 db ?

0002 field_2 db ?

0003 struc_1 ends

0003

0000 ; -------------------

0000

0000 struc_2 struc

0000 field_0 dw ?

0002 struc_2 ends

0002

0000 ; -------------------

0000

0000 struc_3 struc

0000 field_0 dd ?

0004 struc_3 ends

0004

auto a;

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

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

a,GetStrucId(a)

);

0x0 0xFF0000F0

0x1 0xFF0000FE

0x2 0xFF000100

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

Операнд

Пояснения

index

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

Return

==return

Пояснения

!=BADADDR

Идентификатор (ID) структуры

==BADADDR

Ошибка

Long GetStrucIdx(long id);

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

Операнд

Пояснения

id

Идентификатор структуры

Return

==return

Пояснения

!=BADADDR

Индекс

==BADADDR

Ошибка

Long GetStrucIdByName(char name);

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

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

auto a,b;

a=AddStrucEx(-1,"MyNewStruc1",0);

b=GetStrucIdByName("MyNewStruc1");

Message("0x%X 0x%X \n",a,b);

0000 MyNewStruc struc ; (sizeof=0)

0000 MyNewStruc ends

0xFF00020A 0xFF00020A

Обратите внимание, что функция чувствительна к регистру, (большинство ассемблеров его игнорируют). Поэтому имена “MyStruc” и “mystruc” не считаются идентичными, что и доказывает следующий пример:

auto a,b;

a=AddStrucEx(-1,"MyNewStruc",0);

b=GetStrucIdByName("mynewstruc");

Message("0x%X 0x%X \n",a,b);

0000 MyNewStruc struc ; (sizeof=0)

0000 MyNewStruc ends

0xFF00020A 0xFFFFFFFF

Операнд

Пояснения

name

Имя структуры

Return

==return

Пояснения

!=BADADDR

Идентификатор

==BADADDR

Ошибка

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