Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа8.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
238 Кб
Скачать
☆

Лабораторная работа №8 «Дополнительные команды»

Раздел 1

«Команды логических операций»

Цель работы:

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

Методические указания:

Для подготовки лабораторной работы использовать:

  • программу OllyDbg;

  • исполняемый файл – Crackme.exe.

  • методические указания по лабораторной работе.

Наряду со средствами арифметических вычислений, система команд микропроцессора имеет также средства логического преобразования данных. Под логическими понимаются такие преобразования данных, в основе которых лежат правила формальной логики. Формальная логика работает на уровне утверждений истинно и ложно. Для микропроцессора это, означает 1и 0 соответственно. Для компьютера язык нулей и единиц является родным, но минимальной единицей данных, с которой работают машинные команды, является байт. Однако, на системном уровне часто необходимо иметь возможность работать на предельно низком уровне - на уровне бит. 

Логические операции представлены булевыми операторами NOT (инверсия), AND (конъюнкция), OR (дизъюнкция) XOR (исключающее ИЛИ). К логическим командам можно отнести и команду неразрушающей проверки TEST. Все логические операции являются поразрядными: выполняются независимо для всех битов операндов.

1 AND (logical AND)

Команда AND используется для логического умножения двух операндов. Результатом этой операции над двумя битам является 1, если они оба равны 1, и 0 во всех остальных случаях. Результат помещается по адресу первого операнда.

Таблица результатов для операции AND:

  • 1 and 1 = 1;

  • 1 and 0 = 0;

  • 0 and 1 = 0;

  • 0 and 0 = 0.

Для разбора команды необходимо в программе OllyDbg открыть файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. При помощи окна Assemble следует заменить эту команду на AND EAX, ECX. Значение регистра EAX равно 00003500, регистра ECX – 00001200, как показано на рисунке 1.1.

Рисунок 1.1 – Registers window

Примечание: значения регистров могут быть другими, в этом случае следует изменить их вручную.

Следующий шаг – выделить строку с командой AND EAX, ECX щелчком левой кнопки мыши, нажать F7. Значение регистра EAX, как видно на рисунке 1.2, станет равным 00001000.

Рисунок 1.2 – Registers window

Чтобы сделать эту операцию вручную, нужно перевести оба числа в двоичный вид: 3500 в двоичном виде будет равно 11010100000000, а 1200 в двоичном виде будет равно 01001000000000. При использовании процедуры AND побитно получится: 1 and 0 = 0, 1 and 1 = 1 и так далее, в итоге получится 01000000000000. Этот двоичный результат эквивалентен - шестнадцатеричному 1000.

2 OR (logical OR)

Команду OR можно использовать для работы с операндами на уровне битов. Результатом этой операции над двумя битам является 1, если один или оба равны 1, и 0 во всех остальных случаях. Результат помещается по адресу первого операнда.

Таблица результатов для операции OR:

  • 1 and 1 = 1;

  • 1 and 0 = 1;

  • 0 and 1 = 1;

  • 0 and 0 = 0.

Для разбора команды необходимо открыть в программе OllyDbg файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. При помощи окна Assemble нужно заменить эту команду на OR EAX, ECX. Значение регистра EAX равно 00003500, регистра ECX – 00001200.

Примечание: значения регистров могут быть другими, в этом случаи требуется их изменить вручную.

Далее необходимо выделить строку с командой OR EAX, ECX щелчком левой кнопки мыши, и нажать F7. Значение регистра EAX станет равным 3700, как показано на рисунке 1.3.

Рисунок 1.3 – Registers window

Чтобы сделать эту операцию вручную, нужно перевести оба числа в двоичный вид: 3500 в двоичном виде будет равно 11010100000000, а 1200 в двоичном виде будет равно 01001000000000. Для этого необходимо применить процедуру AND побитно: 1 or 0 = 1, 1 or 1 = 1 и так далее, в итоге получится 11011100000000. Этот двоичный результат эквивалентен - шестнадцатеричному значению - 3700.

3 XOR

Команду XOR используется для выполнения операции логического исключающего ИЛИ двух операндов. Результатом этой операции над двумя битам является 1, если один и только один из двух битов равен 1, и 0 во всех остальных случаях. Результат помещается по адресу первого операнда.

Таблица результатов для операции XOR:

  • 1 and 1 = 0;

  • 1 and 0 = 1;

  • 0 and 1 = 1;

  • 0 and 0 = 0.

Для разбора команды необходимо открыть в программе OllyDbg файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. При помощи окна Assemble требуется заменить эту команду на XOR EAX, ECX. Значение регистра EAX равно 00003500, регистра ECX – 00001200.

Примечание: значения регистров могут быть другими.

Далее необходимо выделить строку с командой XOR EAX, ECX щелчком левой кнопки мыши, и нажать F7. Значение регистра EAX станет равным 2700, как показано на рисунке 1.4.

Рисунок 1.4 – Registers window

Чтобы сделать эту операцию вручную, нужно перевести оба числа в двоичный вид: 3500 в двоичном виде будет равно 11010100000000, а 1200 в двоичном виде будет равно 01001000000000. Далее необходимо применить процедуру XOR побитно: 1 or 0 = 1, 1 or 1 = 0 и так далее, в итоге получится 10011100000000. Этот двоичный результат эквивалентен - шестнадцатеричному значению - 2700.