Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [ 81 ] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

index

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

Return

==return

Пояснения

!=BADADDR

Индекс предыдущей структуры в списке

==BADADDR

Ошибка

long GetStrucId(long index);

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

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

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

0000 0000 0001 0002 0003 0003 0000 0000 0000 0000 0002 0002 0000 0000 0000 0000 0004 0004

struc 1

field 0 field 1 field 2

struc 1

struc 2

field 0

struc 2

struc 3

field 0

struc 3

struc

db ? db ? db ?

ends

struc

dw ?

ends

struc

dd ?

ends

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

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

Return

==return

Пояснения

!=BADADDR

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

==BADADDR

Ошибка

long GetStrucIdx(long 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 0000 MyNewStruc

struc ; (sizeof=0) 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 0000 MyNewStruc

struc ; (sizeof=0) ends

0xFF00020A 0xFFFFFFFF



Операнд

Пояснения

name

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

Return

==return

Пояснения

!=BADADDR

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

==BADADDR

Ошибка

char GetStrucName(long id);

Функция возвращает имя структуры по ее идентификатору. Очень часто используется совместно с GetStrucId. Например:

0000 0000 0002 0002 0000 0000 0000 0000 0002 0004

0005 0005

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

MyGoodStuc

field 0

MyGoodStuc

MyStruc

field 0 field 2 field 4

MyStruc

My My

MyNewStruc MyNewStruc

struc

dw ?

ends

; (sizeof=0x2)

struc

dw ? dw ? db ?

ends

; (sizeof=0x5)

struc ; (sizeof=0) ends

struc ; (sizeof=0) ends

auto a;

for (a=0;a<GetStrucQty();a++) Message("%s \n",

GetStrucName(GetStrucId(a)

MyGoodStuc

MyStruc

MyNewStruc

Операнд

Пояснения

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

==return Пояснения

Return

!="" Имя структуры

=="" Ошибка



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [ 81 ] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140