Анимация
JavaScript


Главная  Библионтека 

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

INF START AF

Это поле содержит короткое целое, управляющие настойками анализатора IDA. Иначе к ним можно добраться через меню «Options\ Analysis options\ Kernel analyser options 1»


Все они доступны как для чтения, так и для модификации. Назначение битов флагов приведены ниже.

AF FIXUP

0x0001

Создавать сегменты и смещения, используя информацию из таблицы перемещаемых элементов

AF MARKCODE

0x0002

Автоматически преобразовывать типичные последовательности инструкций в код

AF UNK

0x0004

Удалять инструкции без ссылок

AF CODE

0x0008

Трассировать выполнение

AF PROC

0x0010

Автоматически создавать функции

AF USED

0x0020

Поверхностный анализ программы

AF FLIRT

0x0040

Использовать FLIRT сигнатуры

AF PROCPTR

0x0080

Создавать функции в 32-битном сегменте, если это ссылка на сегмент данных



AF JFUNC

0x0100

Переименовывать jump-функции как j ...

AF NULLSUB

0x0200

Переименовывать пустые функции как nullsub ...

AF LVAR

0x0400

Создавать стековые переменные

AF TRACE

0x0800

Отслеживать указатель стека

AF ASCII

0x1000

Автоматически создавать строки

AF IMMOFF

0x2000

Преобразовывать операнды 32-инструкций в смещения

AF DREFOFF

0x4000

Преобразовывать 32-данные в смещения

AF FINAL

0x8000

Сворачивать все unexplored регионы

AF FIXUP

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

Например:

AF FIXUP == 1

AF FIXUP == 0

B8 01 00

mov ax, seg dseg

mov ax,1001h

8E D8

mov ds, ax

mov ds, ax

Значение перемещаемого элемента, выделенного красным цветом, равно 0x1. В любом случае IDA автоматически суммирует его с адресом загрузки (в нашем примере 0x10000).

Если флаг AF FIXUP установлен, то IDA преобразует непосредственный операнд в сегмент, в противном же случае оставит его без изменений.

AF MARKCODE

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

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

Например, для 80x86 процессоров типичной последовательностью инструкций будет инициализация регистра BP (EBP) при входе в процедуру.

.text:00401020 .text:00401021 8B EC

push ebp

mov ebp, esp

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

AF UNK

Этот флаг будучи установленным приводит к тому, что IDA будет каждый раз при пометке инструкции (инструкций) как unexplored автоматически



отслеживать все потерянные перекрестные ссылки, помечая соответствующие регионы как unexplored.

AF CODE

IDA умеет трассировать следование инструкций, отслеживая условные переходы и вызовы процедур. Например, если встретится:

seg000:22C3 E8 5F 00

call

sub 0 2325

то можно быть уверенным, что IDA преобразует в инструкции и код, находящийся по смещению 0x2325. В противном случае (если бит AF CODE сброшен) это выполнено не будет. Более того, при загрузке IDA не дизассемблирует ни одной инструкции, предоставляя это пользователю сделать самостоятельно.

Этот флаг имеет смысл сбрасывать всякий раз, когда IDA неправильно отслеживает ссылки или же вам нужно изучить только отдельно взятый фрагмент кода и дизассемблировать весь файл не к чему.

AF PROC

Автоматически создавать функции на месте вызова инструкцией call. В противном случае функции будут создаваться только для библиотечных процедур. Например:

AF PROC == 0

AF PROC == 1

Seg00:0124 call loc 0 284 I Seg00:0124

call

loc 0 284

Seg000:0284 loc 0 284:

seg000:0284 push seg000:0285 mov

seg000:0288 int seg000:028A ret

3500h

Seg000:0284 sub 0 284 proc near seg000:0284 push ds seg000:0285 mov ax, 3500h seg000:0288 int 21h seg000:028A ret

seg000:02C6 sub 0 284 endp

AF USED

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

Однако, практически значение этой опции никак не влияет на дизассемблируемый текст и в обоих случаях получаются идентичные листинги.

AF FLIRT

Уникальная FLIRT технология позволяет IDA определять имена библиотечных функций наиболее популярных компиляторов по их сигнатурам. Сравните два примера:

AF FLIRT == 1

AF FLIRT == 0

dseg:039A push offset aHelloSailor dseg:039D call printf

dseg:039A pushoffset aHelloSailor dseg:039D call sub 0 1035



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