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

Long AnalyseArea (long sEa,long eEa);

Полный анализ выбранной области. Весь код будет дизассемблирован независимо от того, были обнаружены на него ссылки или нет.

Сравните:

seg000:0100 start db 0BBh ; +

seg000:0101 db 5 ;

seg000:0102 db 1 ;

seg000:0103 db 0FFh ;

seg000:0104 db 0E3h ; у

seg000:0105 db 0B4h ; ¦

seg000:0106 db 6 ;

seg000:0107 db 0B2h ; _

seg000:0108 db 7 ;

seg000:0109 db 0CDh ; -

seg000:010A db 21h ; !

seg000:010B db 0C3h ; +

seg000:010B seg000 ends

MakeCode(0x10100);

seg000:0100 start:

seg000:0100 mov bx, 105h

seg000:0103 jmp bx

seg000:0103 ; ------------------------------------

seg000:0105 db 0B4h ; ¦

seg000:0106 db 6 ;

seg000:0107 db 0B2h ; _

seg000:0108 db 7 ;

seg000:0109 db 0CDh ; -

seg000:010A db 21h ; !

seg000:010B db 0C3h ; +

seg000:010B seg000 ends

AnalyseArea(0x10100,0x10B);

seg000:0100 start:

seg000:0100 mov bx, 105h

seg000:0103 jmp bx

seg000:0105 ; -------------------------------------

seg000:0105 mov ah, 6

seg000:0107 mov dl, 7

seg000:0109 int 21h

seg000:010B retn

seg000:010B seg000 ends

Аналогично авто анализу функция может выполняться в фоновом режиме. Поэтому, в скриптах эта функция используется совместно с Wait(). К сожалению никаких других, более развитых средств синхронизации не предусмотрено.

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

AnalyseArea(0,0x30000) успешно выполнится, даже если наименьшим из существующих окажется адрес '0x10000'.

'AnalyseArea(0,BADADDR-1);' выполнится успешно и для удобства может быть определено как макрос 'AnalyseAll' и размещено в файле 'ida.idc'

При нормальном завершении функция возвращает '1' и '0' если анализ был прерван пользователем по нажатию 'Ctrl-Break'.

Операнд

пояснения

sEA

линейный адрес начала анализируемой области

eEA

линейный адрес конца анализируемой области

Return

==return

пояснения

==1

Анализ был успешно завершен

==0

Анализ был прерван, нажатием Ctrl-Break

Void AutoMark (long ea,long queuetype);

Void AutoMark2 (long start,long end,long queuetype);

Функции, позволяющие непосредственно управлять автоанализом. Пользователь может явно указать, как будет трактоваться тот или иной регион. Допустим, нам известно, что в приведенном ниже примере по адресу 0xE расположены данные, а не код.

Однако IDA не может «догадаться» до этого и дизассемблирует код не так, как мы этого ожидаем.

Разумеется, можно прибегнуть к ручному анализу, но это будет слишком утомительно. Гораздо проще использовать следующие команды:

seg000:0004 unk_0_4 db 0B8h

seg000:0005 db 2

seg000:0006 db 3Dh

seg000:0007 db 0BAh

seg000:0008 db 0

seg000:0009 db 32h

seg000:000A db 0CDh

seg000:000B db 21h

seg000:000C db 73h

seg000:000D db 9

seg000:000E db 0B4h

seg000:000F db 3Ch

AutoMark(0x1000E,AU_UNK);

MakeCode(0x10004);

seg000:0004 loc_0_4:

seg000:0004 mov ax, 3D02h

seg000:0007 mov dx, 3200h

seg000:000A int 21h

seg000:000C jnb near ptr unk_0_1

seg000:000C ; --------------------------------------

seg000:000E db 0B4h ; ¦

seg000:000F db 3Ch ; <

Как видно, «MakeCode» дошла до адреса 0xE и остановилась. Это очень удобный способ ограничить диапазон ее действия (конечного адреса MakeCode не имеет).

Кроме этого с помощью AutoMark можно создавать функции, применять библиотеки сигнатур и так далее. Действие определяется выбором параметра queuetype. Для него определены следующие константы:

определение

действите

AU_UNK

не исследовать указанную область

AU_CODE

преобразовать указанную область в код

AU_PROC

создать функцию по указанному адресу

AU_USED

реанализ

AU_LIBF

применить сигнатуру FLIRT

AU_FINAL

свернуть все неисследованные области

Для одного и того же адреса допустимо задавать более одного указания. IDA помещает все запросы в очередь, поэтому «затирания» не происходит. После анализа запросы удаляются из очереди, поэтому при реанализе следует их задать повторно.

AutoMark отличается от AutoMark2 тем, что последняя позволяет явно указать область действия запроса, тогда как первая определяет ее автоматически.

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

Операнд

пояснения

‘ea’

линейный адрес

queuetype

Тип запроса (смотри таблицу выше)

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