Анимация
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 IP

Это длинное поле содержит в себе значение регистра IP (EIP) при запуске программы. Для бинарных файлов не имеет смысла и возвращает ошибку (BADADDR). В остальных случаях IDA извлекает необходимую информацию из соответствующих полей заголовка файла или же эмулятора загрузчика (например, для com-файлов).

Это поле доступно как на чтение, так и на запись. Однако, модификация начального значения IP (EIP) не приведет к изменению точки входа (Entry point) файла (для этого необходимо изменить значение INF BEGIN EA)

Пример использования:

Message("%x \n", GetLongPrm(INF START IP)

401020

INF BEGIN EA

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

Пример использования:

Message("%x \n",

GetLongPrm(INF BEGIN EA)

401020

INF MIN EA

Это длинное поле хранит минимальный линейный адрес, используемый программой.

Пример использования:

Message("%x \n", GetLongPrm(INF MIN EA)

401000

INF MAX EA

Это длинное поле хранит самый старший адрес, используемый программой. Никогда не бывает равно минус единице (не смотря на то, что это число присутствует в IDC.IDC). Не зависимо от того, загружен файл как бинарный или нет, всегда возвращается максимальный адрес, встретившийся в программе.

Message("%x \n", GetLongPrm(INF MAX EA)



134EA

INF LOW OFF

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

Рассмотрим это на следующем примере: пусть у в исследуемом файле минимальный из возможных адресов равен 0x100. Следовательно, можно предположить, что все операнды, входящие в диапазон от 0 до 0хFF окажутся константами, а свыше 0xFF с равной степенью вероятности могут быть как смешениями, так и константами.

IDA всегда использует беззнаковые значения операндов. Поэтому [BP-2] будет трактоваться как 0xFFFE, а не -2.

Допустима модификация этого поля, в том числе и интерактивно, через меню «~Options\Text representation\voids low limit». По умолчанию IDA использует минимальный линейный адрес. Как правило, первым располагается сегмент кода. Если достоверно известно, что программа не содержит на него ссылок, то значение INF LOW OFF можно изменить таким образом, что бы оно указывало на сегмент данных.

Message("%x \n", GetLongPrm(INF LOW OFF)

401000

INF HIGH OFF

Это длинное поле хранит самый старший из возможных адресов, до которого непосредственные операнды могут трактоваться как тип void. Подробнее об этом было сказано в описании поля INF LOW OFF

По умолчанию INF HIGH OFF равно наибольшему адресу, занимаемому программой. Часто этого оказывается недостаточным для тех программ, что организуют буфера за пределами области статических переменных.

Рассмотрим это на примере типичного EXE файла (SMALL модель памяти -Сегмент стека и заголовок для упрощения не показаны) Все переменные, кроме тех, что инициализируются на стадии компиляции, останутся «не видимы» для IDA. Она посчитает ссылки на них константами, а не смещениями.

Поэтому необходимо изменить значение поля INF HIGH OFF вручную.

Сегмент данных Стат

переменные Сегмент данных Динамическ перемнные

INF MAXREF

Это длинное поле хранит максимальную глубину перекрестных ссылок. По умолчанию 10. Это значение можно изменить через меню (~Options\Cross references)



Crosb reference epth

Пример:

Message("%x \n",GetLongPrm(INF MAXREF));

INF ASCII BREAK

Это однобайтовое поле содержит в себе символ переноса конца строки. Он не будет использоваться IDA при генерации файлов отчета или при выводе на экран. Не влияет он и на трактовку спецификатора \n. Единственное его назначение форматирование сток в дизассемблируемом листинге. (Ниже это будет показано на конкретном примере для большей ясности)

Поле может, как читаться, так и модифицироваться. Изменения вступают в силу немедленно, автоматически переформатируюя все строки в дизассемблируемом тексте. Интерактивно это значение можно изменить, вызвав следующий диалог командой меню «~Options\ ASCII strings options». «ASCII next line char» и есть то поле, о котором сейчас идет речь.


Пример использования:

Message ("0x%X \n",GetCharPrm(INF ASCII BREAK)); 0xA

.rdata:00407384 aRuntimeErrorPr db Runtime Error!,0Ah

.rdata:00407384 db 0Ah

.rdata:00407384 db Program: ,0

SetCharPrm(INF ASCII BREAK,0); Message("0x%X \n",GetCharPrm(INF ASCII BREAK)); 0x0

.rdata:00407384 aRuntimeErrorPr db Runtime Error!,0Ah,0Ah,Program: ,0



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