Анимация
JavaScript
|
Главная Библионтека 0xFFFFFFFFF Числа, отображаемые IDA слева элементов структуры, и есть искомые смещения элементов. При этом необязательно, что бы каждому смещению соответствовал именованный элемент. Поскольку для доступа к членам структуры используются не имена, а смещения элементов, то IDA поддерживает и безыменные поля, которые могут оказаться полезными в ряде случаев.
Членом структуры могут быть, в том числе, и массивы однотипных (гомогенных) элементов. 0000 struc 7 0000 field 0 0004 field 4 0014 field 14 0015 struc 7 struc ; (sizeof=0x15) dd ? db 16 dup(?) db ? ends В этом случае очередным смещением будет смещение следующего элемента структуры.
long GetStrucPrevOff(long id,long offset); Функция возвращает смещение начала предыдущего элемента структуры. В остальном полностью идентична GetStrucNextOff Смещение конца (не начала!) последнего элемента можно получить вызовом GetStrucPrevOff(id,-1); Если неверно задан идентификатор или структура не содержит ни одного члена, то обоих случаях возвращается ошибка BADADDR Например: 0000 msExcept struc ; (sizeof=0x22) 0000 Magic 0004 Count 0008 InfoPtr 000C CountDtr 0010 DtrPtr 0014 unk 0020 Info 0022 msExcept dd dd dd dd dd dd dw ends dup(?) auto a; a=-1; for (;;) a=GetStrucPrevOff (GetStrucIdByName(" msExcept"),a) if (a==-1) break; Message("0x%X \n",a); 0x22 0x20 0x14 0x10 0000 struc 9 0000 struc 9 struc ; (sizeof=0) ends Message("0x%X \n", GetStrucPrevOff( GetStrucIdByName("struc 9")) 0xFFFFFFFFF
long GetFirstMember(long id); Функция возвращает смещение начала первого члена структуры. Это значение всегда равно нулю, за тем исключением, когда неверно задан идентификатор или структура не содержит ни одного члена. В обоих случаях возвращается ошибка BADADDR Например 0000 msExcInfo 0000 Id struc ; (sizeof=0x8) dd ? 0004 Proc dd ? 0008 msExcInfo ends Message("0x%X \n", GetFirstMember( GetStrucIdByName(" msExcept")) 0000 struc 9 0000 struc 9 struc ; (sizeof=0) ends Message("0x%X \n", GetFirstMember( GetStrucIdByName("struc 9")) 0xFFFFFFFFF
long GetLastMember(long id); Функция возвращает смещение начала (не конца!) последнего члена структуры. Обратите внимание, что этот результат не совпадает со значением, взращаемым GetStrucNextOff для последнего элемента! Например: 0000 msExcept 0000 0000 Magic 0004 Count 0008 InfoPtr 000C CountDtr 0010 DtrPtr 0014 unk 0020 Info 0022 msExcept struc ; (sizeof=0x22) dd dd dd dd dd dd dw ends dup(?) auto a; a=0; for (;;) Message("0x%X \n",a); a=GetStrucNextOff (GetStrucIdByName(" msExcept"),a); if (a==-1) break; 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 |