Анимация
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

0xFFFFFFFFF

Числа, отображаемые IDA слева элементов структуры, и есть искомые смещения элементов. При этом необязательно, что бы каждому смещению соответствовал именованный элемент. Поскольку для доступа к членам структуры используются не имена, а смещения элементов, то IDA поддерживает и безыменные поля, которые могут оказаться полезными в ряде случаев.

0000

struc

struc

; (sizeof=0xd)

0000

field

0002

undefined

0003

field

0007

field

0008

? ;

undefined

0009

? .

undefined

000A

? ;

undefined

000B

field

000C

field

000D

struc

ends

Членом структуры могут быть, в том числе, и массивы однотипных (гомогенных) элементов.

0000 struc 7

0000 field 0

0004 field 4

0014 field 14

0015 struc 7

struc ; (sizeof=0x15)

dd ?

db 16 dup(?)

db ?

ends

В этом случае очередным смещением будет смещение следующего элемента структуры.

Операнд

Пояснения

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

Return

Завершение

Пояснения

!=BADADDR

Смещение начала очередного члена структуры

==BADADDR

Ошибка

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

Операнд

Пояснения

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

Return

Завершение

Пояснения

!=BADADDR

Смещение начала предыдущего члена структуры

==BADADDR

Ошибка

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

Операнд

Пояснения

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

Return

Завершение

Пояснения

!=BADADDR

Смещение начала первого члена структуры

==BADADDR

Ошибка

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