Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012- СИСПРОГ на МАСМ.doc
Скачиваний:
21
Добавлен:
09.11.2019
Размер:
553.47 Кб
Скачать

6.3.1Фрейм кода (области 1-5)

Для удобства последующей работы рекомендуется включить режимы визуального показа условных и безусловных переходов (меню Options – Debugging Options – CPU – пометить чекбоксы Show jump path, Show grayed path if jump is not taken, Show jumps to selected command). Эти опции не являются обязательными, но их использование заметно повышает удобство пошагового исполнения программ. Когда указатель команды окажется на любой команде, вызывающей передачу управления (к примеру, JNE, JS, JZ), то в зависимости от значений установленных флагов отладчик покажет переход либо серым цветом (если он не будет выполняться), либо красным цветом, если переход будет выполнен.

Трассировка (пошаговое выполнение) программы выполняется следующими клавишами:

F7 – с заходом в процедуры (команды CALL address),

F8 – без захода в процедуры.

Клавиша F9 производит либо полное выполнение программы, либо выполнение до установленной точки останова (breakpoint, BP), либо автоматическое выполнение кода между двумя точками останова.

Точки остановки можно установить следующими способами: в ручном режиме (выбрать строчку программы, где нам нужна BP, и нажать F2), либо текстовой командой, вводимой через CommandBar.

Пояснение. При установке точки остановки отладчик вставляет в код отлаживаемой программы специальную команду INT3, означающую «вызов отладочного прерывания номер 3». Смысл этих слов понятен при условии, что вы прочитали в учебнике или прослушали на лекции определение прерывания и представляете механизм его выполнения.

Если у вас в OllyDbg установлен этот плагин, то окошко ввода команды открывается нажатием Alt-F1. Установленная ВР подсвечивается в колонке адресации. Первый способ установки очевиден, на втором остановимся подробнее.

Ниже приводятся некоторые команды установки точек остановки, взятые из Справки по OllyDbg (меню Help – Content – Указатель – Command line plugin):

BP address_expression [,condition] Установить ВР (поставить INT3) на требуемый адрес при выполнении заданного условия.

Например:

BP EAX+10 – адрес вычисляется выражением «текущее значение регистра EAX плюс 10 байт вперед по коду»;

BP 410010, EAX==WM_CLOSE - ВР устанавливается на команду со смещением 410010 при условии, что ЕАХ равен константе WM_CLOSE;

BP Kernel32.GetProcAddress - адрес задан именем системной процедуры GetProcAddress из внешней динамической библиотеки Kernel32. Попутно заметим, что имена процедур – это по сути есть адресные константы;

BPX label Установить BP на вызов процедуры, с именем label в текущей программе. Например BPX CreateFileA.

BC expression Удалить ВР по адресу. Например, BC 410010

MR expression1 [,expression2] Установить ВР на чтение памяти из диапазона адресов от expression1 до expression2.

MW expression1 [,expression2] Установить ВР на запись в память в диапазон адресов от expression1 до expression2.

MD Удалить точки остановки по обращениям к памяти.

2КМ в окне по команде (либо же ПКМ на команде – Assemble, либо пробел) вызывает окно редактирования кода, что иногда помогает отключить некоторые вызовы функций, изменить направление ветвления, и произвести всякие другие изменения в процессе отладки. Отметим, что при замене, допустим, команды CALL program.131432E8 длиной 5 байт командой NOP (нет операции, No OPeration, код команды 90h), длина которой 1 байт, отладчик автоматически заполнит лишние четыре байта тем же кодом 90h, что сохраняет смещения в памяти всех остальных команд программы. Следует только учитывать, что после перезагрузки программы в отладчике (Debug - Restart) все изменения сбрасываются.

Перемещение по коду программы легко осуществляется через ПКМ. Для этого просто надо выполнить ПКМ – Go to – expression, и в появившемся окне ввести адрес, на который мы хотим посмотреть (следует учесть, что это не меняет содержимое регистра EIP, т.е. это не является трассировкой). Вернуться на прежнюю позицию кода можно либо нажав ПКМ – Go to – Previous, либо нажав минус на NumPad. Значение EIP также не меняется. Эти команды являются просто инструментом для обзора кода.

Бывает, что мы остановились на некотором вызове, например, CALL program.131432E8, но не знаем, надо ли нам его трассировать по F7. В данном случае будет уместна такая функция, как «подсмотреть», где находится вход в вызываемую процедуру. Сделать это можно либо через ПКМ – Follow, либо через клавишу Enter. Значение EIP как и в предыдущем случае, не изменяется, т.е. указатель очередной выполняемой команды по-прежнему будет находиться на вызове CALL program.131432E8. Вернуться из просмотра можно клавишей « - » на NumPad. Дальше первого адреса перехода по CALL отладчик не «заглядывает».

В случае, когда нам нет необходимости выполнять весь код отлаживаемой программы, а только какую-то его отдельную процедуру, можно воспользоваться такой особенностью, как установка адреса выполняемой программы (ПКМ – New origin here) на нужной нам команде. Это позволяет пошагово выполнить отдельную процедуру, что является очень удобным в некоторых случаях.

Если мы модифицируем код программы (assemble) и хотим сохранить эти изменения его в exe-файле для будущего использования, то следует использовать опцию «сохранить изменения» (ПКМ – Copy to Executable – Selection или ПКМ – Copy to Executable – All Modifications).

Внешний вид отладчика настраивается опцией ПКМ по фрейму – Appearance.