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

Long DfirstB (long To);

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

Для понимания этого, рекомендуется прочесть описания функций AddCodeXref, add_dref, Dfirst.

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

Например:

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

seg000:26C1 cmp ax, word_0_2934 ;  источник

seg000:277B cmp dx, word_0_2934 ;  источник

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

seg000:2934* ; seg000:26C1r

seg000:2934* ; seg000:277Br

Рассмотрим список источников перекрестных ссылок, который IDA сформировала по адресу seg000:0x2934 – {0x12331, 0x126С1, 0x1277B}.

Вызов DfirstB возвратит первый из них – с наименьшим линейным адресом.

Message(“0x%X \n”,

ВfirstB(0x12934)

);

0x12331

Операнд

Пояснения

To

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

Return

Пояснения

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

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

Long DnextB (long To,long current);

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

Для более глубокого понимания принципов работы рекомендуется ознакомиться с описанием функций AddCodeXref, add_dref, Dnext

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

Например:

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

seg000:26C1 cmp ax, word_0_2934 ;  источник

seg000:277B cmp dx, word_0_2934 ;  источник

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

seg000:2934* ; seg000:26C1r

seg000:2934* ; seg000:277Br

Поскольку DnextB хранит текущий адрес не во внутренней переменной, а в передаваемом параметре, то существует возможность, модифицируя его, управлять работой функции.

Так, например, DnextB(ScreenEA(), 0) гарантированно вернет следующий за ним адрес, а пройти весь список (за исключением ссылок на следующую инструкцию) можно с помощью следующего кода:

auto a;

a=0;

for (;;)

{

a=DnextB(ScreenEA(),a);

if (a==-1) break;

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

}

0x12331

0x126C1

0x1277B

Функция возвращает ошибку BADADDR, если список исчерпан, (то есть текущий адрес наибольший в списке) или не существует.

Операнд

Пояснения

To

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

Current

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

Return

Пояснения

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

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

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