Анимация
JavaScript
|
Главная Библионтека Аналогично авто анализу функция может выполняться в фоновом режиме. Поэтому, в скриптах эта функция используется совместно с Wait(). К сожалению никаких других, более развитых средств синхронизации не предусмотрено. Задаваемые границы анализируемой области не обязательно должны существовать в природе. В крайнем случае, будет проанализирован регион от наименьшего до наибольшего существующих адресов. AnalyseArea(0,0x30000) успешно выполнится, даже если наименьшим из существующих окажется адрес 0x10000. AnalyseArea(0,BADADDR-1); выполнится успешно и для удобства может быть определено как макрос AnalyseAll и размещено в файле ida.idc При нормальном завершении функция возвращает 1 и 0 если анализ был прерван пользователем по нажатию Ctrl-Break.
void AutoMark (long ea,long queuetype); void AutoMark2 (long start,long end,long queuetype); Функции, позволяющие непосредственно управлять автоанализом. Пользователь может явно указать, как будет трактоваться тот или иной регион. Допустим, нам известно, что в приведенном ниже примере по адресу 0xE расположены данные, а не код. Однако IDA не может «догадаться» до этого и дизассемблирует код не так, как мы этого ожидаем. Разумеется, можно прибегнуть к ручному анализу, но это будет слишком утомительно. Гораздо проще использовать следующие команды:
AutoMark(0x1000E,AU UNK); MakeCode(0x10004); seg000:0004 seg000:0004 seg000:0007 seg000:000A seg000:000C seg000:000C loc 0 4: mov ax, 3D02h mov dx, 3200h int 21h jnb near ptr unk 0 1 seg000:000E seg000:000F db 0B4h ; 1 db 3Ch ; < Как видно, «MakeCode» дошла до адреса 0xE и остановилась. Это очень удобный способ ограничить диапазон ее действия (конечного адреса MakeCode не имеет). Кроме этого с помощью AutoMark можно создавать функции, применять библиотеки сигнатур и так далее. Действие определяется выбором параметра queuetype. Для него определены следующие константы:
Для одного и того же адреса допустимо задавать более одного указания. IDA помещает все запросы в очередь, поэтому «затирания» не происходит. После анализа запросы удаляются из очереди, поэтому при реанализе следует их задать повторно. AutoMark отличается от AutoMark2 тем, что последняя позволяет явно указать область действия запроса, тогда как первая определяет ее автоматически. Обращаться с этой функцией следует осторожно. Если тип запроса не будет соответствовать определенным константам, то IDA выдаст сообщение об ошибке и аварийно выйдет в операционную систему без сохранения результата работы.
long FindText (long ea,long flag,long y,long x,char str); Эта очень полезная и мощная функция для глобального поиска подстроки во всем дизассемблируемом тексте. Сюда входят не только строковые выражения, но и символьное представление инструкций, имен, комментариев, меток и перекрестных ссылок. Словом, равносильно тому, как если бы мы вывели результат работы в дизассемблера в LST файл - отчета и искали бы в нем требуют подстроку. Заметим, что чаще все же так и поступают потому что то FindText работает достаточно медленно и не поддерживает символы-джокеры, как, например hiew. Очень часто критерии поиска настолько сложны, что не могут быть реализованы через FindText. Поэтому приходится прибегать к созданию хитрых скриптов для весьма изощренного поиска. Однако, в ряде случаев FindText все же хватает для повседневых задач и легче использовать несколько вызовов этой функции с разными параметрами, чем прибегать к нештатным средствам. Младший бит флага задает направление поиска. Если он установлен, то поиск будет идти от младших адресов к старшим и наоборот. Первый, считая от нуля, бит флагов указывает на чувствительность функции к регистру. Если он установлен, то заглавные и строчечные символы будут различаться. Координаты x и y применимы только к многострочным комментариям (ExtLinA\ExtLinB) в остальных жу случаях они игнорируются и могут быть равны нулю. srt задает подстроку поиска. seg000:005A 88 04 seg000:005C 46 seg000:005D E2 E7 seg000:005F BE EC 01 seg000:0062 E8 78 00 mov inc loop mov call [si], al si loc 0 46 si, 1ECh sub 0 DD Message("%x \n", FindText(0x1005A,1,0,0,"loop") 1005D В случае ошибки поиска функция возвращает константу BADADDR.
char Demangle(char name, long disable mask) Функция «размангляет» переданное ей имя name в соответствии с заданными настойками disable mask (см. таблицу ). Если функция не может разманглить имя, она возвращает пустую строку. IDA Pro поддерживает спецификации Watcom, Microsoft и Borlad. Перечни символов используемых для замангления имен содержатся в поле "MangleChars" конфигурационного файла <ida.cfg> MangleChars = "@$%?" "@$%"; watcom microsoft borland Пример использования: Message(">%s\n",Demangle("??1streambuf@@UAE@XZ", MNG DEFNONE)); a) вызов функции Demangle для «размангления» имени "??1streambuf@@UAE@XZ" >public: virtual thiscall streambuf::~streambuf(void) b) результат
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 |