- •Лабораторная работа №6 «Команды работы с данными»
- •Раздел 1
- •«Команды перемещения данных»
- •1 Nop (No Operation)
- •2 Push (push operand onto stack)
- •3 Pop (pop operand from the stack)
- •4 Pushad (push All general Double word registers onto stack)
- •5 Popad (pop All general Double word registers from the stack)
- •6 Mov (moVe operand)
- •9 Lea (Load Effective Address)
- •10 Xchg (Exchange Register/Memory with Register)
- •Раздел 2 «Математические команды»
- •1 Inc (inCrement operand by 1)
- •2 Dec (deCrement operand by 1)
- •3 Add (adDition)
- •4 Adc (aDdition with Carry)
- •5 Sub (suBtract)
- •6 Sbb (SuBtract with Borrow)
- •7 Mul (muLtiply)
- •8 Imul (Integer muLtiply)
- •9 Div (diVide unsigned)
- •10 Idiv (Integer diVide)
- •11 Xadd (eXchange and add)
- •12 Neg (neGate operand)
9 Lea (Load Effective Address)
Данная команда похожа на команду MOV, но первый операнд - это регистр общего назначения, а второй - адрес ячейки памяти. Эта команда полезна в первую очередь тогда, когда адрес зависит от предыдущих вычислений. Для разбора команды в программе OllyDbg требуется открыть файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. Необходимо выполнить замену этой команды при помощи окна Assemble на команду LEA EAX, DWORD PTR DS:[ECX+38]. В данном случае есть квадратные скобки, однако в них задан не адрес на прямую, а вычисления, по которым он получается. До выполнения команды регистр ECX содержит значение -0012FFB0, как представлено на рисунке 1.28.
Рисунок 1.28 – Registers window
Далее необходимо выполнить команду NOP по адресу 401003 нажатием клавиши F7. В этом примере LEA прибавит к значению регистра ECX 38 и полученное значение поместит в регистр EAX: 0012FFB0+38=0012FFE8. После выполнения команды, на рисунке 1.29 видно, что указанный адрес помещен в регистр EAX.
Рисунок 1.29 – Registers window
10 Xchg (Exchange Register/Memory with Register)
Команда XCHG предназначена для обмена двух значений между регистрами или между регистрами и памятью.
Для разбора команды в программе OllyDbg требуется открыть файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. При помощи окна Assemble нужно заменить эту команду на команду XCHG EAX, ECX. Затем нажать F7. После выполнения команды регистры EAX и ECX обменялись значениями. Обмен значениями регистров показан на рисунке 1.30.
Рисунок 1.30 – Изменение значений в Registers window
Задание:
Поочередно исследовать выполнение команд перемещения, на примере программы Crackme, используя методическое методические указания.
Требования к зачету:
Уметь объяснить, как выполняется команда NOP.
Уметь объяснить, как выполняется команда PUSH.
Уметь объяснить, как выполняется команда POP.
Уметь объяснить, как выполняется команда PUSHAD.
Уметь объяснить, как выполняется команда POPAD.
Уметь объяснить, как выполняется команда MOV.
Уметь объяснить, как выполняется команда MOVSX.
Уметь объяснить, как выполняется команда MOVZX.
Уметь объяснить, как выполняется команда LEA.
Уметь объяснить, как выполняется команда XCHG.
Раздел 2 «Математические команды»
Цель работы:
Научиться использовать математические команды для изменения значений операндов.
Методические указания:
Для подготовки лабораторной работы использовать:
программу OllyDbg;
исполняемый файл – Crackme.exe.
методические указания по лабораторной работе.
В эту группу входят команды сложения, вычитания, умножения, деления и сравнения двух тридцатидвухразрядных операндов. Значение одного из операндов, участвующих в арифметических операциях, содержится в регистре общего назначения, номер которого указан в команде. В качестве второго операнда может использоваться значение, заданное непосредственно в коде команды, или содержимое другого регистра общего назначения.
Классификация арифметических команд:
