Анимация
JavaScript
|
Главная Библионтека Return Пояснения Линеный адрес приемника первой перекрестной ссылки long RnextO (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 если список исчерпан или отсутствует источник long RfirstBO(long To); Функция возвращает линейный адрес источника перекрестной ссылки для заданного приемника. Практически идентична RfirstB, за тем исключением, что не имеет доступа к ссылкам на следующую инструкцию, поэтому возвращает действительно первый элемент списка линейный адресов источников. Поэтому ее рекомендуется использовать в паре с функцией RnextB, впрочем, RnextB(xxx, 0) возвращает идентичный результат и хотя работает ничуть не быстрее, но немного экономит на компактности кода. Для понимания этого рекомендуется ознакомиться с описанием функций AddCodeXref, DelCodeXref, RfrstB, RnextB Если указан неверный источник, (то есть линейный адрес, не содержащий перекрестных ссылок) или источник перекрестной ссылки данных, то функция возвратит ошибку BADADDR
long RnextBO (long To,long current); Эта функция по идее (а точнее следуя из сказанного в файле idc.idc) должна отличатся от RnextB только отсутствием доступа к перекрестным ссылкам на следующую инструкцию. Однако из-за особенностей реализации функции Rnext она «не видит» такой тип ссылок и это делает обе функции полностью идентичными. Поэтому никакого описания здесь не приводится, поскольку пришлось бы полностью повторить все сказанное об Rnext. Чаще всего ссылка на следующую команду не требуется. В этих случаях и следует применять вызов Rnext0. В противном случае придется воспользоваться листингом, приведенным выше.
void add dref(long From,long To,long drefType); Подробнее об архитектуре перекрестных ссылках было сказано в описании функции AddCodeXref. Для удобства IDA поддерживает две группы перекрестных ссылок - на данные и на код. Каждая группа со своим набором функций и возможностей. Типы, поддерживаемых перекрестных ссылок на данные следующие:
С первого взгляда кажется, что можно создать перекрестную ссылку на данные с помощью вызова AddCodeXref, только лишь указав соответствующий тип ссылки. Например: AddCodeXref(0x1014 8,0x1014C,2); seg000:014C loc 0 14C: ; CODE XREF: seg000:0148w На самом же деле постфикс (в данном случае w) играет только информационную роль и ничуть не влияет на тип ссылки, которая так и осталась кодовой, что видно по предваряющему ее ключевому слову. Сравните это со следующим примером: add dref(0x1014 8,0x1014C,2); seg000:014A ja loc 0 14F seg000:014C ; DATA XREF: seg000:0148w seg000:014C stosb Обратите внимание, что IDA никак не контролирует корректность ссылки, полностью перекладывая эту работу на код, вызывающий эту функцию. Тип ссылки играет чисто информационную роль и служит для ускорения анализа дизассемблируемой программы. Никаких других влияний на работу IDA он не оказывает. Однако стоит все же придерживаться единой схемы наименования перекрестных ссылок, что бы ни приводить пользователя в замешательство. 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 ; источник 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 [ 72 ] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |