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

Dr_o - Смещение (Offset)

Под смещением понимается любое (прямое или косвенное) обращение к адресу ячейки данных.

Например:

Seg000:0301 push offset loc_0_30A ;  источник

seg000:030A loc_0_30A: ; DATA XREF: seg000:0301o

seg000:030A ;  приемник

seg000:3000 DW offset byte_0_293A ;  источник

Seg000:293A byte_0_293A DB ? ; DATA XREF: seg000:3000o

Seg000:293A ;  приемник

Но и в том числе и такие инструкции, где смещение не указано явно, а только подразумевается.

Например, LEA.

Dr_w Запись (Write)

Любая инструкция, производящая прямую запись в ячейку.

seg000:2928 mov cs:byte_0_2939,1 ;  источник

seg000:2939* DB ? ; DATA XREF seg000:2928w

seg000:2939 ;  приемник

seg000:0E5F dec word_0_F72 ;  источник

seg000:0F72* DW ? ; DATA XREF seg000:0E5Fw

seg000:0F72 ;  приемник

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

Dr_r Чтение (Read)

Любая инструкция, производящая прямое чтение ячейки. Например:

seg000:0D08 mov ax, word_0_F72 ;  источник

seg000:0F72*word_0_F72 dw 0 ; DATA XREF: seg000:0D08r

seg000:0F72 ;  приемник

При этом инструкции, выполняющие цикл операций чтение – вычисление – запись, IDA всегда относит к типу dr_w, а не dr_r

Обратите внимание, что функция add_dref не возвращает результата успешности операции, поэтому для того, что бы определить действительно ли была создана перекрестная ссылка, или нет – приходится прибегать к полному прохождения списка в попытках найти в нем «свой» адрес.

Операнд

Пояснения

From

Адрес источника перекрестной ссылки

To

Адрес приемника перекрестной ссылки

Dreftype

Тип перекрестной ссылки (смотри таблицу, приведенную выше)

Void del_dref(long From,long To);

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

Например:

seg000:2331 mov word_0_2934, ax ;  источник

seg000:2934*word_0_2934 dw 0 ; DATA XREF: seg000:2331w

seg000:2934 ;  приемник

Del_dref(0x2331,9x2934);

seg000:2331 mov word_0_2934, ax ;

seg000:2934*word_0_2934 dw 0 ;

seg000:2934 ;

К сожалению, нет никакой возможности узнать о результате успешности операции, поскольку функция возвращает тип void.

Часто путают источник и приемник местами, что приводит к ошибкам. Необходимо запомнить, что IDA всегда создает комментарий к перекрестной ссылке возле ее приемника, а не источника.

Поэтому, что бы удалить указанную перекрестную ссылку необходимо воспользоваться следующим кодом:

Del_dref(0x2331,9x2934);

Разумеется, что эта функция не пригодна для удаления перекрестных ссылок на код.

Операнд

Пояснения

From

Адрес источника перекрестной ссылки

To

Адрес приемника перекрестной ссылки

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