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

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

DW segment

Inf_prefflag

Это однобайтовое поле хранит флаг, задающий формат вывода префикса на экран. Имеет смысл только когда вывод префиксов разрешен, (то есть флаг INF_SHOWPREF установлен).

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

Интерактивно это можно изменить с помощью следующих опций диалога настойки:

  • Options \ Text representation \ Segment addresses

  • Options \ Text representation \ Function offsets

  • Options \ Text representation \ Display stack pointer

Флаг

значение

Пояснение

Пример

PREF_SEGADR

0x01

Представлять префикс в виде сегментного адреса

seg000:2190

PREF_FNCOFF

0x02

Представлять префикс в виде смещения внутри функции

Sub_0_22DD+1B

PREF_STACK

0x04

Завершать префикс указателем стека

Seg000:2190 008

Sub_0_22DD+1B 008

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