Анимация
JavaScript
|
Главная Библионтека ОПЕРАНДЫ #definition Элементы могут содержать один и более операндов, включающих в себя непосредственные значения. Одно и то же непосредственное значение может являться и константой, и смещением в сегменте, и базовым адресом сегмента. Константа в свою очередь может отображаться в двоичной, восьмеричной, десятичной и шестнадцатеричной системе исчисления или символьной ASCII-строки. Тип и представление каждого операнда определяется значением соответствующих битов флагов (см. таблицу 14). Две группы битов определяют представление первого и второго операнда; если же элемент содержит более двух операндов, третий и все последующие операнды имеют тот же самый тип и представление, что и второй операнд. Если ни один бит атрибутов операнда не установен, операнд не имеет никакого типа, (т.е. имеет тип "void") и отображается в системе исчисления принятой по умолчанию. В зависимости от настоек IDA Pro бестиповые операнды могут отображаться другим цветом (по умолчанию красным). Определить имеет ли некий элемент кода непосредственный операнд или нет можно анализом бита FF IMMD флагов. Если он установлен - элемент кода имеет непосредственный операнд, и, соответственно, наоборот. Значение бита FF IMMD не зависит от типа непосредственного операнда - чем бы он ни был: смещением, константой, базовым адресом сегмента или имел тип void, - флаг FF IMMD указывает на сам факт наличия (отсутствия) непосредственного операнда, но никак не связан с его типом. В полностью дизассемблированной программе не должно быть ни одного операнда с типом void, - типы всех операндов должны заданы явно в соответствии с их назначением, которое можно узнать путем анализа программы. В некоторых случаях IDA Pro позволяет автоматически отличить смещения от констант: a) используя информацию о перемещаемых элементах (fixup info) IDA Pro может автоматически преобразовать бестиповые операнды в базовые адреса сегментов и смещения b) в 32-разрядном сегменте, инструкция, имеющая непосредственный операнд, содержащий значение 0x10000 и выше, автоматически преобразуется в смещение, если это разрешено настойками c) то же, что и в пункте b но для данных d) непосредственный операнд инструкции push, следующей за инструкцией, заносящий в стек базовый адрес сегмента, автоматически преобразуется в смещение, если это разрешено настройками e) непосредственный операнд, копируемый инструкций MOV в один из регистров общего назначения, автоматически преобразуется в смещение, если он предшествует инструкции MOV, заносящий в один из сегментных регистров базовый адрес сегмента f) непосредственный операнд, копируемый инструкций MOV в ячейку памяти независимо от способа ее адресации, автоматически преобразуется в смещение, если он предшествует инструкции MOV, заносящий в ячейку памяти базовый адрес сегмента. Авто-анализатор IDA Pro непрерывно совершенствуется, и новые версии становятся способными автоматически распознать смещения все в большем и большем числе случаев, - однако, вместе с этим увеличивается и процент ложных срабатываний, поэтому, окончательная доводка дизассемблируемого листинга ложится на плечи пользователя.
Таблица 13 возможные представления непосредственных операндов элементов типа данные и код Сводная таблица функций
success OpBinary(long ea,int n) Функция отображает операнд (операнды) в двоичном виде, добавляя в его конце суффикс b. Пример использования: seg000:0000 a) исходные данные ax,41h OpBinary(SegByName("seg0 0 0"),1); b) вызов функцию OpBinary для преобразования второго слева операнда в двоичный вид. seg000:0000 mov ax, 1000001b c) результат - второй слева операнд преобразован в двоичный вид ??? #верстальщику - change table 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 |