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

Long RfirstB0(long To);

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

Практически идентична RfirstB, за тем исключением, что не имеет доступа к ссылкам на следующую инструкцию, поэтому возвращает действительно первый элемент списка линейный адресов источников.

Поэтому ее рекомендуется использовать в паре с функцией RnextB, впрочем, RnextB(xxx, 0) возвращает идентичный результат и хотя работает ничуть не быстрее, но немного экономит на компактности кода.

Для понимания этого рекомендуется ознакомиться с описанием функций AddCodeXref, DelCodeXref, RfrstB, RnextB

Если указан неверный источник, (то есть линейный адрес, не содержащий перекрестных ссылок) или источник перекрестной ссылки данных, то функция возвратит ошибку BADADDR

Операнд

Пояснения

To

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

Return

Пояснения

Источник ссылки на следующую инструкцию или если ее нет, то первый адрес в списке.

-1 если список исчерпан или отсутствует источник

Long RnextB0 (long To,long current);

Эта функция по идее (а точнее следуя из сказанного в файле idc.idc) должна отличатся от RnextB только отсутствием доступа к перекрестным ссылкам на следующую инструкцию.

Однако из-за особенностей реализации функции Rnext она «не видит» такой тип ссылок и это делает обе функции полностью идентичными.

Поэтому никакого описания здесь не приводится, поскольку пришлось бы полностью повторить все сказанное об Rnext.

Чаще всего ссылка на следующую команду не требуется. В этих случаях и следует применять вызов Rnext0. В противном случае придется воспользоваться листингом, приведенным выше.

Операнд

Пояснения

To

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

Current

Текущий адрес

Return

Пояснения

Следующий адрес в списке

-1 если список исчерпан или отсутствует источник

Void add_dref(long From,long To,long drefType);

Подробнее об архитектуре перекрестных ссылках было сказано в описании функции AddCodeXref.

Для удобства IDA поддерживает две группы перекрестных ссылок – на данные и на код. Каждая группа со своим набором функций и возможностей.

Типы, поддерживаемых перекрестных ссылок на данные следующие:

Определение

Пояснения

Легенда

dr_O

1

Смещение (Offset)

o

dr_W

2

Запись (Write)

w

dr_R

3

Чтение (Read)

r

dr_T

4

Пользовательский тип

t

С первого взгляда кажется, что можно создать перекрестную ссылку на данные с помощью вызова AddCodeXref, только лишь указав соответствующий тип ссылки.

Например:

AddCodeXref(0x10148,0x1014C,2);

seg000:014C loc_0_14C: ; CODE XREF: seg000:0148w

На самом же деле постфикс (в данном случае ‘w’) играет только информационную роль и ничуть не влияет на тип ссылки, которая так и осталась кодовой, что видно по предваряющему ее ключевому слову.

Сравните это со следующим примером:

аdd_dref(0x10148,0x1014C,2);

seg000:014A ja loc_0_14F

seg000:014C ; DATA XREF: seg000:0148w

seg000:014C stosb

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

Тип ссылки играет чисто информационную роль и служит для ускорения анализа дизассемблируемой программы. Никаких других влияний на работу IDA он не оказывает.

Однако стоит все же придерживаться единой схемы наименования перекрестных ссылок, что бы ни приводить пользователя в замешательство.

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