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

Long DelStrucMember(long id,long member_offset);

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

Однако, на самом деле IDA не удаляет члена структуры, а только преобразует его в последовательность неопределенных байтов. Поэтому, строго говоря, удалить ни какой член структуры (кроме последнего) нельзя, во всяком случае, так, что бы изменить смещения всех остальных (а это требуется и довольно часто!)

Например:

0000 MY_STRUC struc ; (sizeof=0xb)

0000 MyMember_1 dw 4 dup(?)

0008 field_8 db ?

0009 field_9 dw ?

000B MY_STRUC ends

DelStrucMember(

GetStrucIdByName("MY_STRUC"),

0);

0000 MY_STRUC struc ; (sizeof=0xb)

0000 db ? ; undefined

0001 db ? ; undefined

0002 db ? ; undefined

0003 db ? ; undefined

0004 db ? ; undefined

0005 db ? ; undefined

0006 db ? ; undefined

0007 db ? ; undefined

0008 field_8 db ?

0009 field_9 dw ?

000B MY_STRUC ends

При попытке же удалить последний член структуры, он действительно удаляется без остатка.

Пример:

0000 MY_STRUC struc ; (sizeof=0xb)

0000 MyMember_1 dw 4 dup(?)

0008 field_8 db ?

0009 Field_9 dw ?

000B MY_STRUC ends

DelStrucMember(

GetStrucIdByName("MY_STRUC"),

9);

0000 MY_STRUC struc ; (sizeof=0xb)

0000 MyMember_1 dw 4 dup(?)

0008 field_8 db ?

000B MY_STRUC ends

Операнд

Пояснения

id

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

offset

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

Return

==return

Пояснения

==1

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

==0

Ошибка

Интерактивно то же самое можно сделать, если перевести курсор на нужный элемент структуры и нажать клавишу <U>

Long SetMemberName(long id,long member_offset,char name);

Функция позволяет изменять имя члена функции. Функция задается идентификатором, а член любым, принадлежащим ему смещением.

Например:

0000 MY_STRUC struc ; (sizeof=0x9)

0000 db ? ; undefined

0001 db ? ; undefined

0002 db ? ; undefined

0003 db ? ; undefined

0004 db ? ; undefined

0005 db ? ; undefined

0006 db ? ; undefined

0007 db ? ; undefined

0008 field_8 db ?

0009 MY_STRUC ends

SetMemberName(

GetStrucIdByName("MY_STRUC"),

8,"MyGoodMember");

0000 MY_STRUC struc ; (sizeof=0x9)

0000 db ? ; undefined

0001 db ? ; undefined

0002 db ? ; undefined

0003 db ? ; undefined

0004 db ? ; undefined

0005 db ? ; undefined

0006 db ? ; undefined

0007 db ? ; undefined

0008 MyGoodMember db ?

0009 MY_STRUC ends

Операнд

Пояснения

id

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

name

Новое имя члена структуры

offset

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

Return

==return

Пояснения

==1

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

==0

Ошибка

Интерактивно изменить имя можно, переместив на него курсор и нажав клавишу <N>

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