Анимация
JavaScript
|
Главная Библионтека 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, хотя это и следовало бы.
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")
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
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 |