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

SW XRFFNC (0x04)

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

Интерактивно этим значением можно управлять «~ Options \ Cross-reference representation \ Display function offsets»

SW XRFFNC == 1

SW XRFFNC == 0

SetLongPrm(INF XREF,SW XRFFNC);

SetLongPrm(INF XREF,!SW XRFFNC)

CODE XREF: start+AFp

CODE XREF: 004010CFp

SW XRFVAL (0x08)

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

SW XRFVAL == 1

SW XRFVAL == 0

SetLongPrm(INF XREF,SW XRFVAL);

SetLongPrm(INF XREF,!SW XRFFVAL)

CODE XREF: 004010CFp

CODE XREF: ...

INF BINPREF

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

Тогда можно воспользоваться вызовом SetShortPrm(INF BINPREF,0x10) или изменить то же самое значение интерактивно «~ Options \ Text representation \ Number of opcode bytes»

INF BINPREF == 0

INF BINPREF == 0x10

SetShortPrm(INF BINPREF,0);

SetShortPrm(INF BINPREF,0x10);

.text:00401000 sub 0 401000 proc near .text:00401000 push offset aHeloSailor .text:00401005 mov ecx, offset dword 0 408900 .text:0040100A call ??6ostream@@QAEAAV0@PBD@Z .text:0040100F xor eax, eax .text:00401011 retn

.text:00401011 sub 0 401000 endp

.text:00401000 sub 0 401000 proc near .text:00401000 68 40 80 40 00 push offset aHeloSailor .text:00401005 B9 00 89 40 00 mov ecx, offset dword 408900 .text:0040100A E8 72 2B 00 00 call ostreamBBQAEAAVOePBDez

.text:0040100F 33 C0 xor eax, eax

.text:00401011 C3 Ketn

.text:00401011 sub 0 401000 endp

INF CMTFLAG

Это короткое поле содержит набор флагов, манипулирующим выводом и представлением комментариев в дизассемблируемом листинге.

SW RPTCMT

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



можно сделать как вызовом функцией SetShortPrm, так и интерактивно «~Options\ Text representation \ Display repeatable comments»

SW RPTCMT == 1

SW RPTCMT == 0

SetShortPrm(INF CMTFLAG,SW RPTCMT);

SetShortPrm(INF CMTFLAG,!SW RPTCMT)

Jb short near ptr dword 4 023AC ; repeatable cogent

Jb short near ptr dword 0 4 023AC

SW ALLCMT

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

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

SW ALLCMT == 1

SW ALLCMT == 0

SetShortPrm(INF CMTFLAG,SW ALLCMT);

SetShortPrm(INF CMTFLAG,!SW ALLCMT)

Call sub 0 2E2 ; Call Procedure

jnb loc 0 2321 ; Jump if Not Below (CF=0)

nop ; No Operation

call sub 0 2E2 jnb loc 0 2321 nop

SW NOCMT

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

SW LINNUM

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

SW MICRO

INF NAMETYPE

Это короткое поле содержит флаг, управляющий представлением автогенерируемых имен (в терминологии IDA - dummy names). Эти имена автоматически присваиваются всем созданным меткам и процедурам.

Флаг

значение

пояснения

NM REL OFF

Относительная база сегмента и полное смещение

loc 0 1234

NM PTR OFF

Базовый адрес сегмента и смещение

loc 1000 1234

NM NAM OFF

Имя сегмента и смещение (по умолчанию)



loc dseg 1234

NM REL EA

Сегмент, относительный базовому адресу и полный адрес

loc 0 11234

NM PTR EA

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

loc 1000 11234

NM NAM EA

Имя сегмента и полный адрес

loc dseg 11234

NM EA

Полный адрес (без нуля слева)

loc 12

NM EA4

Полный адрес (не менее четырех знаков)

loc 0012

NM EA8

Полный адрес (не менее восьми знаков)

loc 00000012

NM SHORT

Имя сегмента и смещение без спецификатора типа

dseg 1234

NM SERIAL

Перечисленные имена (1,2,3...)

loc 1

INF SHOWBADS

Это однобайтовое поле, будучи установленным, приводит к тому, что IDA будет оставлять в виде дампа все инструкции, которые могут быть неправильно ассемблированы. Например, в исследуемой программе могут встретиться недокументированные команды процессора (подробнее с ними можно ознакомиться, например, на сайте www.x86.org)

Разумеется, что распространенные ассемблеры выдадут ошибку и прекратят работу. Однако, это не худшая ситуация. Множество команд 80x86 процессоров могут быть ассемблированы по-разному. Например, ADD bx, 0x10 может быть представлена как опкодом 81 C3 01 00, так и 83 C3 10

Разница здесь в том, что последняя команда добавляет к BX байт, автоматически расширяя его до слова с учетом знака. Следовательно, возникает неоднозначность, -часто приводящая к неработоспособности программы. Даже если не использовался самомодифицирующийся код, изменение длины инструкции «потянет» за собой все метки и абсолютные адреса в программе. Впрочем, при условии правильного преобразования типов непосредственных операндов это не нарушит работоспособность программы. Поэтому по умолчанию это опция отключена.

Если же в ней возникнет необходимость, то нужно воспользоваться функцией SetCharPrm(INF SHOWBADS,1) или интерактивно ~Options \ Text representation \ Display bad instructions <BAD> marks.

INF SHOWBADS == 1

INF SHOWBADS == 0

SetCharPrm(INF SHOWBADS,1)

SetCharPrm(INF SHOWBADS,0)

seg000:0220 db 0E9h,0,0 ; <BAD> jmp $+3

seg000:0220 jmp $+3

ЗАМЕЧАНИЕ: все же часть инструкций IDA не помечает, как <BAD>, хотя их отказываются ассемблировать распространенные ассемблеры.

Например, команду JMP FAR segment:offset IDA, в отличие от большинства ассемблеров, не считает не правильной. В результате чего приходится вручную менять ее в листинге на последовательность:

DB 0Eah

DW offset



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