Анимация
JavaScript
|
Главная Библионтека
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).
long GetStrucIdx(long id); Функция позволяет получить индекс структуры в списке по ее идентификатору (ID). Обычно такой операции не требуется, поскольку практически все функции принимают на входе именно идентификатор, а не индекс.
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
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
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 |