- •Лабораторная работа №8 «Дополнительные команды»
- •Раздел 1
- •«Команды логических операций»
- •4 Not (not operand)
- •5 Test (test operand)
- •Раздел 2
- •1 Циклы
- •2 Rep (rePeat)
- •Раздел 3 «Команды обработки цепочечных данных»
- •1 Movs (moVe String)
- •3 Lods (lOaD String)
- •4 Stos (stOre String)
- •5 Cmps (CoMPare String)
4 Not (not operand)
Данная команда инвертирует все биты операнда: из 1 в 0, из 0 в 1. Результат помещается по адресу данного операнда.
Таблица результатов для операции NOT:
not 1 = 0;
not 0 = 1.
Для разбора команды требуется в программе OllyDbg открыть файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. При помощи окна Assemble нужно заменить эту команду на NOT EAX. До выполнения команды регистр EAX, кА показано на рисунке 1.5, содержит значение 00001100.
Рисунок 1.5 – Registers window
Шестнадцатеричное значение 1100 эквивалентно двоичному - 0000000000000000000 1000100000000. К примеру, если выделить строку в окне Disassembler window с командой NOT EAX, левой кнопки мыши, и нажать затем F7, то после выполнения команды NOT двоичное значение 0000000000000000000 1000100000000 инвертируется в 11111111110111011111111, что эквивалентно шестнадцатеричному значению FFFFEEFF. Поэтому как показано на рисунке 1.6, в регистре EAX и будет содержаться значение FFFFEEFF.
Рисунок 1.6 – Registers window
5 Test (test operand)
Команда TEST используется для логического умножения двух операндов. Результат операции никуда не записывается, устанавливаются только флаги. Для анализа результата используется флаг Z, который равен единице, если результат логического умножения равен нулю.
Для разбора команды необходимо открыть в программе OllyDbg файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. Нужно заменить ее на TEST EAX,EAX при помощи окна Assemble. В данном случаи сравнивается регистр EAX сам с собой для того, чтобы определить, равен ли регистр EAX нулю.
В окне Registers window необходимо выделить регистр EAX щелчком левой кнопки мыши. В контекстном меню выберите команду Zero, как показано на рисунке 1.7, она позволит автоматически присвоить регистру EAX значение ноль.
Рисунок 1.7 – Контекстное меню регистра в Registers window
Выделив строку с командой TEST EAX,EAX, нужно нажать F7. После выполнения команды активен флаг Z, это изображено на рисунке 1.8. Пользуясь таблицей результатов для операции AND, можно определить, что результат операции AND - 0 and 0 = 0, в виду чего флаг Z и активировался.
Рисунок 1.8 – Registers window
Задание:
Изучить использование логических команд используя методические указания.
Требования к зачету:
Научиться выполнять логическое умножение при помощи команды AND
Научиться выполнять логическое сравнение двух битов с использованием команды OR
Знать, как выполняется операция логического исключающего ИЛИ двух операндов при помощи команды XOR
Уметь с помощью команды NOT инвертировать все биты операнда.
Знать различие между командами AND и TEST.
Раздел 2
«Команды передачи управления: организация циклов»
Цель работы:
Изучить способы реализации циклов.
Методические указания:
Для подготовки лабораторной работы использовать:
программу OllyDbg;
исполняемый файл – Crackme.exe.
методические указания по лабораторной работе.
Циклы, позволяющие выполнить некоторый участок программы многократно, в любом языке являются одной из наиболее употребительных конструкций. В системе команд микропроцессора циклы реализуются, главным образом, с помощью команды LOOP (петля), хотя имеются и другие способы организации циклов. Во всех случаях число шагов в цикле определяется содержимым регистра СХ.
