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

3 Pop (pop operand from the stack)

Данная команда является обратной по отношению к команде PUSH. Она применяется для восстановления содержимого вершины стека в регистр, ячейку памяти или сегментный регистр.

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

Рисунок 1.10 – Окно Assemble

Эта команда берёт первое значение из стека и помещает его в регистр EAX, после этого то значение, которое шло следующим, становится верхним.

До выполнения команды стек будет содержать по адресу 12FFC4 значение 7C816D4F, как показано на рисунке 1.11.

Рисунок 1.11 – Stack window

Регистр ESP указывает на 12FFC4, что является адресом верхнего значения, содержащегося в стеке. Затем, выделив строку с командой POP щелчком левой кнопки мыши, необходимо нажать клавишу F7. Теперь в стеке верхнее значение – 7C910738 находится по адресу 12FFC8, как на рисунке 1.12.

Рисунок 1.12 – Stack window

Теперь регистр ESP указывает на 12FFC8, а регистр EAX содержит значение 7C816D4F.

4 Pushad (push All general Double word registers onto stack)

Эта команда помещает содержимое регистров в стек в следующей последовательности: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.

Для разбора команды необходимо открыть в программе OllyDbg файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. Требуется заменить данную команду при помощи окна Assemble на команду PUSHAD. Затем нужно выделить строку с командой PUSHAD и нажать F7, как показано на рисунке 1.13.

Рисунок 1.13 – Disassemble window

На рисунке 1.14 отображено состояние регистров до выполнения команды PUSHAD.

Рисунок 1.14 – Состояние регистров до выполнения команды PUSHAD

После выполнения команды значения в стеке, как видно из рисунка 1.15, размещаются в указанном ранее порядке.

Рисунок 1.15 – Изменение значений в Stack window

5 Popad (pop All general Double word registers from the stack)

Команда POPAD по принципу работы является обратной команде PUSHAD и используется для восстановления всех 32-разрядных регистров. Комбинация PUSHAD-POPAD часто используется, когда нужно за раз сохранить содержимое всех регистров, потом совершить какие-то другие операции, меняющие значение регистра и стека, а затем восстановить их изначальное состояние с помощью команды POPAD.

Для разбора команды необходимо открыть в программе OllyDbg файл Crackme.exe. В открывшейся программе в окне Disassembler window в самом начале находится команда PUSH 0. Требуется заменить ее на команду PUSHAD. После выполнения этой команды, в окне Disassembler window нужно выделить строку с командой NOP, как показано на рисунке 1.16, и при помощи окна Assemble ввести команду POPAD, далее нажать клавишу F7.

Рисунок 1.16 – Disassembler window

Поскольку стек уже содержит значения регистров, то выполнение этой команды возвратит его в изначальное состояние. Эти изменения показаны на рисунке 1.17.

Рисунок 1.17 – Изменение значений в Stack window

Теперь стек такой же, как и был до выполнения команды PUSHAD, а регистры восстановили свои значения.