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

char GetStrucComment(long id,long repeatable);

Функция возвращает комментарии к структуре. В текущих версиях, включая IDA 4.0, комментарии к структурам поддерживаются лишь частично. Так, например, отсутствует возможность интерактивного комментирования функций (приходится пользоваться вызовом SetStuctComment), повторяемые комментарии поддерживаются лишь частично, что подтверждается следующим примером:

SetStrucComment(

GetStrucIdByName(" msExcInfo"), " MyComment",1);

0000 ; MyComment

0000 msExcInfo

0000

0000 Id

0004 Proc

0008 msExcInfo

struc ; (sizeof=0x8)

dd ? dd ?

ends

XREF: .rdata:004077E6 .rdata:00407780r ... sss

offset (FFFFFFFF)

rdata:004077E6 rdata:004077E6

dd 1879048192

dd 0

Message("%s \n", GetStrucComment(

GetStrucIdByName(" msExcInfo"), 1);

MyComment

Обратите внимание, что IDA не отобразила повторяемый комментарий в строке rdata:004077E6, хотя это и следовало бы.

Операнд

Пояснения

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

Repeatable

Флаг

Пояснения

Неповторяемый комментарий

Повторяемый комментарий

Return

Завершение

Пояснения

!=""

Комментарий

Ошибка

long GetStrucSize(long id);

Функция возвращает размер структуры в байтах, который равен сумме размера всех ее членов. Он отображается в качестве комментария в окне просмотра структур.

Допускается существование структур без единого элемента, размер которых равен

нулю.



0000 msExcInfo

0000

0000 Id

0004 Proc

0008 msExcInfo

struc ; (sizeof=0x8)

dd ? dd ? ends

Message("0x%X \n",

GetStrucSize(GetStrucIdByName(" msExcInfo"))

0000 struc 3 0000 struc 3

struc ; (sizeof=0) ends

Message("0x%X \n",

GetStrucSize(GetStrucIdByName("struc 3")

Операнд

Пояснения

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

==return

Пояснения

Return

!=BADADDR

Размер структуры

==BADADDR

Ошибка

long GetMemberQty(long id);

Функция возвращает число членов структуры. Допускается существование структур без единого элемента, число членов которых равно нулю.

0000 msExcept

0000 Magic

0004 Count

0008 InfoPtr

000C CountDtr

0010 DtrPtr

0014 unk

0020 Info

0020 msExcept

struc ;

dd ? dd ? dd ? dd ? dd ?

dd 3 dup(?) msExcInfo 0 dup(?) ends

Message("0x%X \n",

GetMemberQty(GetStrucIdByName(" msExcept")

Операнд I Пояснения

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



Return

Завершение

Пояснения

!=BADADDR

Число членов структуры

==BADADDR

Ошибка

long GetStrucNextOff(long id,long offset);

Функция возвращает смещение начала очередного элемента в структуре. Первый элемент всегда имеет нулевое смещение (что очевидно), а последний смещение численно равное размеру структуры минус единица.

Это происходит потому, что каждую структуру замыкает «виртуальный» элемент, который не видим для всех остальных функций (в том числе и GetMemberQty). Он был введен из соображений удобства программирования, и во всех остальных случаях может не браться в расчет.

Если неверно задан идентификатор или структура не содержит ни одного члена, то обоих случаях возвращается ошибка BADADDR Например:

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;

0x10

0x14

0x20

0x22

0000 struc 9 0000 struc 9

struc ; (sizeof=0) ends

Message("0x%X \n",

GetStrucNextOff( GetStrucIdByName("struc 9"))



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