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

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

seg000:0000 mov ax, OFFFFh

a) исходные данные - требуется отобразить непосредственное значение, загружаемое в регистр AX в знаковой форме

OpSign(SegByName("seg000"),1);

b) вызов функции OpSign для отображения непосредственного значения, загружаемого в регистр AX в знаковой форме

seg000:0000 mov ax,-1

c) результат - непосредственное значение, загружаемое в регистр AX теперь отображается в знаковой форме.

??? #Верстальщику - change table

аргумент

пояснения

линейный адрес элемента, которому принадлежит операнд

пояснения

первый слева операнд

второй слева, третий (если он есть) и все остальные операнды

==-1

все операнды

return

=return

пояснения

операция выполнена успешно

ошибка

Родственные функции: нет

Интерактивный аналог: "~Edit\Operand types\ Change Sign"; <->

success OpStkvar(long ea,int n)

Функция отображает непосредственное значение, используемые для базовой адресации относительно регистров BP (EBP) и SP (ESP) в виде стековой переменной. Сама стековая переменная должна быть предварительно создана вызовом MakeLoacal (см. описание функции MakeLocal).

Значение регистров BP (EBP) и SP (ESP) IDA в каждой точке программы IDA по возможности определяет автоматически, облегчая тем самым анализ кода, генерируемого оптимизируемыми компиляторами, использующими для адресации локальных переменных регистр SP (ESP) значение которого подвержено частым изменениям. Для ручного задания значения регистра SP (ESP) предусмотрена функция SetSpDiff, к вызову которой приходится прибегать в случае невозможности определить значение стекового регистра автоматическим анализатором.

Замечание: IDA эмулирует выполнения некоторых наиболее употребляемых инструкций, таких как PUSH, POP, ADD, SUB и т.д., для отслеживания изменения значения регистра SP (ESP). Более сложные операции с регистрами пока не поддерживаются.

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

seg000:0000 start

seg000:0000

seg000:0002

proc near

mov bp, sp

sub sp, 10h



seg000:0005 mov word ptr [bp-2], 666h

seg000:000A add sp, 10h

seg000:000D retn

seg000:000D start endp

a) исходные данные - требуется представить непосредственное знаечние, вычитаемое из регистра bp в виде имени локальной переменной.

MakeLocal(SegByName("seg000"),SegByName("seg000")+0xD,"[BP-2]","MyVar");

b) вызов функции MakeLocal (см. описание MakeLocal) для создания локальной переменной MyVar, расположенной двумя байтам «выше» конца кадра стека

OpStkvar(SegByName("seg000"),0);

c) вызов функции OpStkvar для отображения непосредственного значения в виде имени ранее созданной локальной переменной

seg000:0100 start seg000:0100

seg000:0100 MyVar

seg000:0100 seg000:0100 seg000:0102 seg000:0105 seg000:010A seg000:010D seg000:010D start

proc near

= word ptr -2

mov sub mov

retn endp

bp, sp sp, 10h

[bp+MyVar]

sp, 10h

666h

d) результат - непосредственное значение отображено в виде имени локальной переменной MyVar (в тексте она выделена жирным шрифтом)

Замечание: подробнее о поддержке локальных переменных можно прочитать в главе «Функции»

??? #Верстальщику - change table

аргумент

пояснения

линейный адрес элемента, которому принадлежит операнд

пояснения

первый слева операнд

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

==-1

все операнды

return

=return

пояснения

операция выполнена успешно

ошибка

Родственные функции: нет

Интерактивный аналог: "Edit\Operand types\ Stack variable"; <K>

char GetOpnd(long ea,long n)

Функция возвращает операнд в строковом виде, т.е. том виде, в каком дизассемблер отображает его на экране. Пример использования:

seg000:0000

a) исходные данные

mov ax, 9

требуется получить операнды в том виде, в котором они



отображены на экране.

Message(">%s,%s\n",GetOpnd(SegByName("seg0 0 0"),0), GetOpnd(SegByName("seg000"),1));

b) вызов функции GetOpnd для получения операндов в том виде, в котором они отображены на экране

>ax, 0

c) результат

??? #верстальщику - change table

аргумент

пояснения

линейный адрес элемента, которому принадлежит операнд

пояснения

первый слева операнд

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

return

=return

пояснения

операция выполнена успешно

ошибка

Родственные функции: GetOpType, GetOperandValue Интерактивный аналог: нет

char AltOp (long ea,long n)

Функция возвращает операнд, определенный пользователем (см. описание функции OpAlt).

seg000:0000

a) исходные данные

Регистр AX, 9

Message(">%s\n",AltOp(SegByName("seg000"),1));

b) вызов функции AltOp для получения операнда, опеределенного пользователем

>Регистр AX

c) результат - получен операнд, определенный пользователем ??? #верстальщику - change table

аргумент

пояснения

линейный адрес элемента, которому принадлежит операнд

пояснения

первый слева операнд

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

return

=return

пояснения

операция выполнена успешно

ошибка

Родственные функции: OpAlt Интерактивный аналог: нет



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