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

Long Rfirst0 (long From);

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

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

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

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

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

Примеры использования:

seg000:28C6 pop di ;  источник

seg000:28C7 pop si ;  приемник

Message(“0x%X \n”,

Rfirst0(0x128C6)

);

0xFFFFFFFF

seg000:28CB retn

seg000:28CB sub_0_2847 endp

Message(“0x%X \n”,

Rfirst0(0x128CB)

);

0xFFFFFFFF

seg000:2870 jmp loc_0_2892 ;  источник

seg000:2870 nop

seg000:2892 loc_0_2892: ; CODE XREF: seg000:2870j

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

seg000:2892 cmp byte ptr [si], 22h ; '"'

Message(“0x%X \n”,

Rfirst0(0x12870)

);

0x12892

Операнд

Пояснения

From

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

Return

Пояснения

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

Long Rnext0 (long From,long current);

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

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

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

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

В противном случае придется воспользоваться листингом, приведенным ниже.

auto a;

a=0;

for (;;)

{

a=RnextB(ScreenEA(),a);

if (a==-1) break;

if (a>RfirstB(ScreenEA())

Message(“0x%X \n”,

RfirstB(ScreenEA()

);

Message("0x%X \n",a);

}

Операнд

Пояснения

Form

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

Current

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

Return

Пояснения

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

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

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