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

Success OpSign(long ea,int n)

Функция отображает операнд в знаковой или целочисленной форме, работая как триггер – если до ее вызова операнд отображался в целочисленной форме, после станет отображаться в знаковой и, соответственно, наоборот.

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

seg000:0000 mov ax, 0FFFFh

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

OpSign(SegByName(“seg000”),1);

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

seg000:0000 mov ax,-1

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

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

аргумент

пояснения

ea

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

n

=n

пояснения

==0

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

==1

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

==-1

все операнды

return

=return

пояснения

==1

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

==0

ошибка

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

Интерактивный аналог: “~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 proc near

seg000:0000 mov bp, sp

seg000:0002 sub sp, 10h

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

seg000:000A add sp, 10h

seg000:000D retn

seg000:000D start endp

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

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

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

OpStkvar(SegByName(“seg000”),0);

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

seg000:0100 start proc near

seg000:0100

seg000:0100 MyVar = word ptr -2

seg000:0100

seg000:0100 mov bp, sp

seg000:0102 sub sp, 10h

seg000:0105 mov [bp+MyVar], 666h

seg000:010A add sp, 10h

seg000:010D retn

seg000:010D start endp

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

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

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

аргумент

пояснения

ea

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

n

=n

пояснения

==0

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

==1

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

==-1

все операнды

return

=return

пояснения

==1

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

==0

ошибка

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

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

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