Анимация
JavaScript
|
Главная Библионтека long IsUnion(long id); Функция определяет тип структуры. Если она представляет собой объединение, то возвращается единица, и ноль в противном случае. Пример использования: 0000 union 13 0000 union 13 0000 union ; (sizeof=0x0) ends Message("%x \n", IsUnion( GetStrucIdByName("union 13") 0000 MY STRUC 0000 MY STRUC struc ends Message("%x \n", IsUnion( GetStrucIdByName("MY STRUC") ноль! Обратите внимание, что функция в результате ошибки возвращает не BADADDR, а Например: 0000 MY STRUC 0000 MY STRUC struc ends Message("%x \n", IsUnion( GetStrucIdByName("MYSTRUCT") Не ясно, действительно ли структура MYSTRUCT не объединение, или же ее вообще не существует. Поэтому достоверным значением, возращенным функцией, следует считать только единицу.
success DelStruc(long id); Функция удаляет существующую структуру по ее идентификатору. В большинстве случаев используется совместно с GetStrucIdxByName, поскольку ID структуры скрыт от пользователя. Например: 0000 MY STRUC 0000 MY STRUC 0000 0000 ; 0000 0000 struc 10 0000 struc 10 0000 0000 ; 0000 0000 union 13 0000 union 13 struc ends struc ends union ends DelStruc( GetStrucIdByName("struc 10") 0000 MY STRUC 0000 MY STRUC 0000 0000 ; 0000 0000 union 13 0000 union 13 0000 struc ; ends union ; ends Обратите внимание, что при этом заново перестаиваются таблицы индексов структур, поэтому полученные ранее значения уже не действительны. Их необходимо обновить заново. Так, например: 0000 MY STRUC 0000 MY STRUC 0000 0000 ; 0000 0000 struc 10 0000 struc 10 0000 0000 ; 0000 0000 union 13 0000 union 13 struc ends struc ends union ends auto id1,id2; id1= GetStrucId(0); id2= GetStrucId(1); DelStruc(id1); DelStruc(id2); 0000 struc 10 0000 struc 10 struc ends Вместо того, что бы удалить первые две структуры IDA удалила первую и третью. Но эта ошибка не IDA, а разработчика скрипта! Действительно, когда была удалена первая структура, то по индексу 1 стала теперь расположена не вторая, а третья структура! Однако, если попытаться сделать так: auto id1,id2; id1= GetStrucId(0); DelStruc(id1); id2= GetStrucId(1); DelStruc(id2); То получится то же самое! Индексы были обновлены, однако, этого оказалось мало! В действительности код должен выглядеть так: auto id1,id2; id1= GetStrucId(0); DelStruc(id1); id2= GetStrucId(0); 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 |