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

Таблица 14

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

seg000:0100 start:

seg000:0100

seg000:0103

seg000:0103 ; -

mov retn

ax, 105h

seg000:0104 MyStruc db 0

seg000:0105 dw 6666h

seg000:0107 dw 9999h

seg000:0107 seg000 ends seg000:0107

a) исходные данные - требуется представить непосредственное значение,

загружаемое в регистр AX в виде смещения, отсчитываемого относительного начала струкуры MyStruc.

OffEx (SegByName("seg000")+0x100,1,REF OFF16,

SegByName("seg000")+0x104,SegByName("seg000"),1); b) вызов функции OpOffEx для представления непосредственного значения в виде смещения, отсчитываемого относительно начала структуры MyStruc.

Пояснение: линейный адрес структуры MyStruc равен SegByName("seg000")+0x104, следовательно, целевой адрес tagreg равен SegByName("seg000")+0x104;

базовый адрес сегмента, которому принадлежит структура, будучи выраженным в байтах равен SegNyName("seg000"), следовательно, аргумент base равен SegByName("seg000");

смещение искомого элемента относительно начала структуры равно operand value - offset MyStruc, т.е. в непосредственных значениях - 0x105 -0x104 = 1, следовательно, аргумент tdelta равен 1;

операнд представляет собой 16-разрядное непосредственное значение, поэтому, тип смещения - REF OFF16.

seg000:0100 start:

seg000:0100

seg000:0103

seg000:0103 ; -

mov retn

ax, offset yStruc+1

db 0 ; DATA XREF: seg000:0100o

dw 6666h

dw 9999h

ends

с) результат - непосредственное значение теперь представлено в виде смещения, отсчитываемого от начала структуры MyStruc

seg000:0104 MyStruc seg000:0105 seg000:0107 seg000:0107 seg000

Замечение: в данном примере было допустимо использовать автоматическое определение целевого адреса, однако, для большей ясности оно было вычислено вручную.

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

аргумент

пояснения

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

пояснения

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

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



==-1 все операнды

reftype

==reftype

тип смещения

REF OFF8

8-битное смещение

REF OFF16

16-битное смещение

REF OFF32

32-битное смещение

REF LOW8

смещение представлено 8 младшими битами 16 битного непосредственного значенияt

REF LO6

смещение представлено 16 младшими битами 32 битного непосредственного значенияt

REF HIGH8

смещение представлено 8 старшими битами 16 битного непосредственного значенияt

REF HIGH16

смещение представлено 16 старшими битами 32 битного непосредственного значенияt

target

==target

пояснения

!=BADADDR

целевое смещение

==BADADDR

вычисли целевое смещение автоматически по следуюй формуле target=operand value - tdelta +base

base

базовый адрес сегмента, выраженный в байтах (не параграфах!)

tdelta

относительное смещение, считаемое относительно целевого смещения; может быть как положительным, так и отрицательным

return

=return

пояснения

успешное завершение операции

ошибка

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

Интерактивный аналог: "~Edit\Operad types\User-defined offset";<Ctrl-R>

success OpSeg(long ea,int n)

Функция отображает операнд (операнды) в виде имени сегмента, базовый адрес которого равен значению операнда. Если сегмента с таким базовым адресом не существует, функция возвращает ошибку.

Замечание: в процессе загрузки файла IDA автоматически преобразует все перемещаемые элементы в базовые адреса соответствующих сегментов.

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

seg000:0000 mov ax, 1000h

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

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

b) вызов функции OpSeg для преобразования непосредсвтенного операнда в имя сегмента с соответствующим базовым адресом

seg000:0000 mov ax, seg seg000

c) результат - непосредственный операнд теперь представлен в виде имени сегмента с соответствующим базовым адресом

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

аргумент пояснения"



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

пояснения

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

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

==-1

все операнды

return

=return

пояснения

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

ошибка

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

Интерактивный аналог:"~ Edit\Operand types\ Segment" <S>

success OpAlt(long ea,long n,char str)

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

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

seg000:0000

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

ax, 9

OpAlt(SegByName("seg000"),0,"Регистр AX");

b) вызов функции OpAlt для переименования первого слева операнда в строку «Регистр AX».

seg000:0000 mov Регистр AX, 9

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

аргумент

пояснения

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

пояснения

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

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

==-1

все операнды

return

=return

пояснения

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

ошибка

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

Интерактивный аналог: "~Edit\Operand types\ Enter operand manually";<Alt-F1>

success OpSign(long ea,int n)

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



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