Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014- СП 3.0 ЛАБЫ ОБЯЗАТ.doc
Скачиваний:
99
Добавлен:
01.03.2016
Размер:
896 Кб
Скачать
      1. Исполнение программы под отладчиком

В отладке готовых программ огромную помощь программистам оказывают специальные программы – отладчики.

Они выполняют роль своеобразной оболочки, внутри которой открывают ехе-файл, который загружается в память в полноценный образ программы. Различие с обычным способом загрузки-исполнения программы состоит в том, что в «обычном» способе программу исполняет напрямую процессор, а «под отладчиком» первичным процессом исполнения является отладчик, а отлаживаемая программа выступает в роли вторичного процесса, запускаемого и контролируемого из первого. Это позволяет получать всю информацию о размещении программы в виртуальной памяти ее процесса, видеть каждый байт любой секции, при желании – пошагово (отдельными машинными командами) исполнять программу, наблюдая изменения в памяти и регистрах процессора, и делать еще много чего, что описано в руководствах по использованию отладчиков.

Существуют отладчики «уровня ядра операционной системы» и «уровня приложения». Первые позволяют отлаживать даже саму операционную систему как программное приложение. Вторые работают только с прикладными программами, и не вмешиваются в работу ОС, она сама исполняет код отладчика. Мы будем работать с отладчиком уровня приложения. Вы вольны выбирать любой доступный вам отладчик, но мы, руководствуясь имеющимся опытом, рекомендуем OllyDbgстабильной версииv.1.10, доступный по ссылке (это сплошная (!) строка)

https://sites.google.com/site/systempromasm/glavnaa-stranica/resursy/ollydbg110xp-%D0%A0%D0%90%D0%91%D0%9E%D0%A7%D0%98%D0%99.rar?attredirects=0&d=1

Скачайте и установите на свой компьютер эту программу.

Приемлемое по полноте описание отладчика OllyDbgвы найдете по ссылке

http://exelab.ru/art/?action=view&id=284,

а здесь мы опишем только самое основное, без чего непонятно будет, что и как мы делаем в этой работе. Итак, скриншот отладчика – рис. 5.2.

Рисунок 5.2 – Скриншот отладчика OllyDbg 1.1 с открытым в нем файлом coff1.exe. а – фрейм кода; б – окно оперативного вывода; в – фрейм данных; г – фрейм стека; д – фрейм регистров.

Окно отладчика показывает пять фреймов (подокон).

Верхний левый фрейм (а) показывает секцию кода программы в виде таблицы со структурой

Смещение

Машинный код

Дизассемблер

Пояснение

00401034

Е8 В9000000

CALL <JMP.&kernel32.ExitProcess>

ExitProcess

Третья колонка «Дизассемблер» содержит текст, который отладчик получает обратным переводоммашинного кода команды в ассемблерную запись. Машинный код читается из ехе-файла. Обратный перевод машинного кода в ассемблер и называется дизассемблированием. Существуют отдельные программы-дизассемблеры, выполняющие эту работу (например,Disasm). Здесь мы видим, что отладчикOllyDbgвключает в себя дизассемблер как одну из своих функциональных возможностей.

Под фреймом кода находится маленькое окошко (б) консольного оперативного вывода результатов выполнения каждой очередной команды в пошаговом режиме.

Нижний левый фрейм (в) показывает секцию данных в точно таком формате, какой использует знакомый вам по прошлой работе HexWorkshop:

00403000 44 33 22 11 88 77 66 55 41 42 43 44 45 46 00 CC D3"€wfUABCDEF.М

Это смещение, затем 16 байт hex-числами, затем те же байты символами (см заголовок таблицы этого фрейма, там написано «Address,Hexdump,ASCII»).

Нижний правый фрейм (г) показывает секцию системного стека программы в период ее исполнения. Формат «Смещение; 4 байта в hex-формате; Пояснение».

Верхний правый фрейм (д) показывает состояние процессора после каждой команды. Видны значения регистров и флагов. Красным выделяются значения, которые изменились последней выполненной командой.

Команда File–Openоткрывает в отладчике нужный ехе-файл. Далее можно выполнить программу пошагово.F8 исполняет одну очередную команду и, если это команда вызова подпрограммы (процедуры)CALL, в тело подпрограммы заход не производится, сразу показывается результат ее выполнения. Если на командеCALLнажатьF7, произойдет переход в тело процедуры на ее первую команду.

Рассуждая о выполнении любой программы, не следует забывать, что, как бы там ни было, мы всегда работаем в многозадачной ОС Windows, в защищенном режиме работы процессора. В силу этого компоновщиком всегда дополнительно включаются в любую программу вызовы процедур ядра операционной системы для выполнения необходимых подготовительных действий (помимо кода, который написал сам программист). Эти действия нужны для организации выполнения нового процесса, модификации сегментных регистров и т.п. Здесь, при выполнении данной лабораторной работы, «код программиста» начинает пошагово выполняться под отладчиком с того момента, когда указатель очередной команды во фрейме кода установится на смещение 00401000 (это примерно после 13 нажатий наF8 от момента открытия программы в отладчике).

В любой момент пошагового выполнения программы под отладчиком можно выполнить команду Debug-Restart(Ctrl-F2), и программа опять вернется в исходное состояние.