Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

0001 MyMember4 db ?

0002 db ? ; undefined

0003 MyMember2 dw ?

0005 field_5 db ?

0006 MYSTRUC ends

0006

Последний аргумент nbytes задает размер нового члена структуры в байтах. С первого взгляда это бессмысленно, поскольку и так ясно из типа члена (смотри определения flag), за исключением, правда может быть ASCII строки, но и та в большинстве случаев определяется завершающим символом или типом, указанном в typeid.

На самом деле этот аргумент необходимо указывать всегда. Он должен быть кратен размеру члена структуры и если это отношение больше единицы, то IDA автоматически создает массив однотипных элементов.

Например:

0000 MY_STRUC struc ; (sizeof=0x8)

0008 MY_STRUC ends

AddStrucMember(

GetStrucIdByName("MY_STRUC"),

"MyMember_1",

-1,

FF_WORD,

-1,

8);

0000 MY_STRUC struc ; (sizeof=0x8)

0000 MyMember_1 dw 4 dup(?)

0008 MY_STRUC ends

Если попробовать указать не кратный размер, то вызов функции завершится ошибкой:

0000 MY_STRUC struc ; (sizeof=0x8)

0000 MyMember_1 dw 4 dup(?)

0008 MY_STRUC ends

Message("0x%X \n",

AddStrucMember(

GetStrucIdByName("MY_STRUC"),

"MyMember_2",

-1,

FF_WORD,

-1,

9)

);

0000 MY_STRUC struc ; (sizeof=0x8)

0000 MyMember_1 dw 4 dup(?)

0008 MY_STRUC ends

0xFFFFFFFD

Эта функция практически единственная, способная возвращать расширенный код ошибки, не только указывающий на неуспешное завершение вызова, но еще и определяющий его источник.

Все возможные коды возврата приведены в таблице ниже:

Определение

Значение

STRUC_ERROR_MEMBER_NAME

-1

Заданное имя уже существует

STRUC_ERROR_MEMBER_OFFSET

-2

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

STRUC_ERROR_MEMBER_SIZE

-3

Неверный аргумент nbyte

STRUC_ERROR_MEMBER_TINFO

-4

Неверный аргумент typeid

STRUC_ERROR_MEMBER_STRUCT

-5

Неверный id структуры

STRUC_ERROR_MEMBER_UNIVAR

-6

Объединение не может иметь членов, переменного размера

STRUC_ERROR_MEMBER_VARLAST

-7

Члены переменного размера должны находится в конце

Операнд

Пояснения

id

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

name

Имя структуры

Offset

==offset

Значение

!=BADADDR

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

==BADADDR

Добавить новый член в конец

flag

Тип нового члена

typeid

Идентификатор структуры или тип ASCII-строки

nbytes

Размер нового члена в байтах

Return

==return

Пояснения

==1

Успешное завершение

==0

Ошибка (см коды завершения выше)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]