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

Операнды #definition

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

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

Если ни один бит атрибутов операнда не установен, операнд не имеет никакого типа, (т.е. имеет тип “void”) и отображается в системе исчисления принятой по умолчанию. В зависимости от настоек IDA Pro бестиповые операнды могут отображаться другим цветом (по умолчанию красным).

Определить имеет ли некий элемент кода непосредственный операнд или нет можно анализом бита FF_IMMD флагов. Если он установлен – элемент кода имеет непосредственный операнд, и, соответственно, наоборот. Значение бита FF_IMMD не зависит от типа непосредственного операнда – чем бы он ни был: смещением, константой, базовым адресом сегмента или имел тип void, – флаг FF_IMMD указывает на сам факт наличия (отсутствия) непосредственного операнда, но никак не связан с его типом.

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

В некоторых случаях IDA Pro позволяет автоматически отличить смещения от констант:

а) используя информацию о перемещаемых элементах (fixup info) IDA Pro может автоматически преобразовать бестиповые операнды в базовые адреса сегментов и смещения

b) в 32-разрядном сегменте, инструкция, имеющая непосредственный операнд, содержащий значение 0x10000 и выше, автоматически преобразуется в смещение, если это разрешено настойками

c) то же, что и в пункте b но для данных

d) непосредственный операнд инструкции push, следующей за инструкцией, заносящий в стек базовый адрес сегмента, автоматически преобразуется в смещение, если это разрешено настройками

e) непосредственный операнд, копируемый инструкций MOV в один из регистров общего назначения, автоматически преобразуется в смещение, если он предшествует инструкции MOV, заносящий в один из сегментных регистров базовый адрес сегмента

f) непосредственный операнд, копируемый инструкций MOV в ячейку памяти независимо от способа ее адресации, автоматически преобразуется в смещение, если он предшествует инструкции MOV, заносящий в ячейку памяти базовый адрес сегмента.

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

представление первого слева операнда

флаг

#

представление

FF_0VOID

0x00000000

тип void

FF_0NUMH

0x00100000

шестнадцатеричное представление

FF_0NUMD

0x00200000

десятичное представление

FF_0CHAR

0x00300000

символьное представление

FF_0SEG

0x00400000

представление в виде базового адреса сегмента

FF_0OFF

0x00500000

представление в виде смещения в сегменте

FF_0NUMB

0x00600000

бинарное представление

FF_0NUMO

0x00700000

восьмеричное представление

FF_0ENUM

0x00800000

представление в виде перечисления

FF_0FOP

0x00900000

пользовательское представление

FF_0STRO

0x00A00000

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

FF_0STK

0x00B00000

представление в виде стековой переменной

представление второго слева операнда

флаг

#

представление

FF_1VOID

0x00000000

тип void

FF_1NUMH

0x00100000

шестнадцатеричное представление

FF_1NUMD

0x00200000

десятичное представление

FF_1CHAR

0x00300000

символьное представление

FF_1SEG

0x00400000

представление в виде базового адреса сегмента

FF_1OFF

0x00500000

представление в виде смещения в сегменте

FF_1NUMB

0x00600000

бинарное представление

FF_1NUMO

0x00700000

восьмеричное представление

FF_1ENUM

0x00800000

представление в виде перечисления

FF_1FOP

0x00900000

пользовательское представление

FF_1STRO

0x00A00000

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

FF_1STK

0x00B00000

представление в виде стековой переменной

Таблица 13 возможные представления непосредственных операндов элементов типа данные и код

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