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

встретив регистровый переход, целевой адрес которого она предсказать не в силах; по завершению дизассемблирования функция возвратила длину первой инструкции, равную трем байтам

Message(">%X\n",MakeCode(SegByName("seg000")+0x106));

d) повторно вызываем функцию MakeCode, передавая ей адрес следующей инструкции (значение регистра SI при загрузке com файла равно 0x100, а после выполнения инструкции ADD SI, 6 - 0x106, следовательно целевой адрес перехода JMP SI равен 0x106)

seg000:0100 seg000:0103 seg000:0103 seg000:0105 seg000:0106 seg000:0106 seg000:0109 seg000:010A seg000:010B seg000:010C seg000:010C seg000:010C seg000:010F seg000:0110 seg000:0112 seg000:0112 seg000:0114 seg000:0115 >3

add jmp

db 0B9h

loc 0 10C:

mov lodsw xchg push

xor inc loop

si, 114h

byte ptr [si], si

loc 0 10C si

CODE XREF: seg000:0110j

db db

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

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

аргумент

пояснения

линейный адрес бестипового байта или головы уже существующего элемента кода

return

=return

пояснения

длина первой дизассемблируемой инструкции

ошибка

Родственные функции: нет Интерактивный аналог: "~Edit\Code" <C>

char GetMnem(long ea)

Функция возвращает символьную мнемонику инструкции элемента кода, расположенного по линейному адресу ea. Для получения операндов (если они есть) следует воспользоваться функцией GetOpnd (см. главу «Операнды»)

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

seg000:0000 mov ah, 9

a) исходные данные - требуется получить символьную мнемонику инструкции



Message(">%s\n",GetMnem(SegByName("seg0 0 0")));

b) вызов функции GetMnem

>mov

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

аргумент

пояснения

линейный адрес элемента кода

return

=return

пояснения

!=""

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

==""

ошибка

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

void MakeUnkn(long ea,long expand)

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

Замечание: автогенирируемые метки, назначаемые ASCII-строкам при их разрушении удаляется

Аргумент ea задает любой линейный адрес, принадлежащий разрушаемому элементу.

Аргумент expand будучи неравным нулю указывает на необходимость разрушения всей цепочки элементов, связанных друг с другом перекрестными ссылками типа «ссылка на следующую инструкцию» (см. главу «Перекрестные ссылки»)

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

1. Эксперимент

seg000:0000 aHelloSailor a) исходные данные

db Hello, Sailor,0

MakeUnkn(SegByName("seg000")+0x1,0);

b) вызов функции MakeUnkn для разрушения элемента данных типа «ASCII-строка»

seg000:

0000

seg000:

0001

seg000:

0002

seg000:

0003

seg000:

0004

seg000:

0005

seg000:

0006

seg000:

0007

seg000:

0008



seg000:

0009

69h ;

seg000:

000A

6Ch ;

seg000:

000B

6Fh ;

seg000:

000C

72h ;

с) результат - элемент данных разрушен 2. Эксперимент

seg000:0100 seg000:0103 a) исходные данные

add jmp

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

b) вызов функции MakeUnkn для разрушения только одного элемента кода

seg000:0100 start

seg000:0101

seg000:0102

seg000:0103 ; -

с) разрушен один элемент кода

3. Эксперимент

seg000:0100 add

seg000:0103 jmp

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

db 83h ; Г db 0C6h ;

db 6 ;

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

b) вызов функции MakeUnkn для разрушения всей цепочки элементов кода

seg000:0100 seg000:0101 seg000:0102 seg000:0103 seg000:0104 seg000:0105

start

db 83h db 0C6h db 6 db 0FFh db 0E6h db 0B9h

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

агрумент

пояснения

любой линейный адрес, принадлежащий разрушаемому элементу

expand

разрушение только одного элемента кода или данных

разрушение всей цепочки элементов кода или только одного элемента данных.

return

=return

пояснения

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

ошибка

Родственные функции: нет Интерактивный аналог: "~Edit\Undefine"; <U>

Замечение: нажатие <U> равносильно вызову MakeUnk(ScreenEA(),1) и



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