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

Лабораторная работа №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, регистра ECX00001200.

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

Далее необходимо выделить строку с командой 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, регистра ECX00001200.

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

Далее необходимо выделить строку с командой 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.