- •Системное программирование на макроассемблере masm32
- •«Системное программирование» (часть 1)
- •Вступление
- •1Организация среды исполнения для масм
- •1.1Цель работы
- •1.2 Теоретические сведения
- •If errorlevel 0 команда2
- •If errorlevel 0 goto метка
- •1.3Выполнение работы
- •1.4Состав отчета по работе
- •1.5Контрольные вопросы
- •2.2.2Состав пакета масм
- •2.2.3Центр масм – редактор Quick Editor
- •2.3Выполнение работы
- •2.4Состав отчета по работе
- •2.5Контрольные вопросы
- •3Высокоуровневый интерфейс языка масм
- •3.1Цель работы
- •3.2 Теоретические сведения
- •3.2.1Процедуры и макросы в ассемблере
- •3.2.2Синтаксис высокого уровня масм
- •3.2.3Макрос invoke
- •3.3Выполнение работы
- •4.2.2Потоки вывода и ввода
- •4.2.3Вывод и ввод в консольных приложениях
- •4.3Выполнение работы
- •4.4Состав отчета по работе
- •4.5Контрольные вопросы
- •5Ввод и вывод в ассемблерных приложениях с графическим интерфейсом
- •5.1Цель работы
- •5.2Теоретические сведения
- •5.3Выполнение работы
- •6.3.1Фрейм кода (области 1-5)
- •6.3.2Фрейм дампа памяти (области 9,10 и 11)
- •6.3.3Фрейм регистров процессора (области 6, 7 и 8)
- •6.3.4Фрейм стека (области 12, 13 и 14)
- •6.4Выполнение работы
- •6.5Состав отчета по работе
- •6.6Контрольные вопросы
- •Приложение а Префиксы «венгерской» нотации типов данных WinApi
- •Рекомендованная литература
6.4Выполнение работы
Откройте отладчик OllyDbg. Если требуется, проведите начальную настройку – выберите цвета фона и текста, включите показ переходов, установите плагин CommandBar и проверьте его работу (Alt-F1). Для удобства трассировки выполните подсветку переходов и вызовов процедур: Options – Appearance – Code highlighting – Highlighting Jumps’n’calls – Restore defaults. У нас вызовы процедур подсветились цианом, а команды переходов – желтым. Возможно, в ваших настройках цвета окажутся другими.
Откройте в отладчике программу MASM32 \ tutorial \ console \ demo1 \ hello.exe. Обратите внимание на начальный адрес первой команды программы – 00401000. В дальнейшем вы узнаете, что в локальном адресном пространстве программы, выполняемой в защищенном режиме, он всегда такой.
Выделите мышью во фрейме кода все команды до адреса 401090 включительно (всю программу). Скопируйте выделенное в буфер обмена и сохраните в текстовом файле «фрейм кода» для отчета. Аналогично создайте текстовые копии фреймов регистров, стека и дампа памяти, они войдут в отчет.
Включите (если они выключены) заголовки колонок во фрейме кода. ПКМ по фрейму кода – Appearance – Show bar. Обратите внимание, что после этого команда Show bar заменилась на команду Hide bar, которой эти заголовки при желании можно скрыть.
Важная часть работы по освоению новой программы – это «смотреть и понимать». Приступим к этому. Просмотрите на колонку Hex dump во фрейме кода. Запишите в отчет работы, как отладчик выделил группы команд со смещениями 00401000…0040100C и 00401014… 00401047? Сформулируйте и запишите в отчет обоснованное предположение, что означают эти элементы выделения частей кода.
Что содержится в колонке Comment против команд со смещениями 40101A… 40101С и 40102F…40103E? Сформулируйте и запишите в отчет обоснованное предположение, что означают эти элементы выделения частей кода.
Изучим, как в отладчике показываются переходы. Включите через Alt-F1 командную строку и введите bp 401050. Установилась точка остановки на заданном смещении. Запишите, как это проявилось визуально.
Выполните F9 – выполнение до точки остановки.
Нажимая F8, наблюдайте, как происходит выполнение с показом переходов. Проходя через команды, помеченные в колонке Hex dump символами «˅», «˄» или «˃», обращайте внимание на то, какие сообщения появляются в области 5 (рис. 6.1). Запишите наблюдаемое в отчет. Как эти сообщения связаны с визуальными символами показа выполняемого (или не выполняемого) перехода? Описать в отчете.
Трассировка программы. Выполните рестарт программы через Ctrl-F2. Нажимая F8, выполните программу до конца. Сколько команд Call вы при этом встретили? Если не успели сосчитать, повторите трассировку.
Повторите трассировку с заходом в процедуры (F7) с подсчетом встретившихся команд Call. Объясните в отчете причины столь большого расхождения результатов трассировки по F8 и F7. Повторите F7-трассировку еще раз, но постарайтесь теперь отследить наибольшую глубину вложенности CALL-вызовов в этой простой программе.
Сделайте выводы по работе, оформите отчет.