- •Системное программирование на макроассемблере masm32
- •Содержание
- •Вступление
- •Префиксы «венгерской» нотации типов данных в описаниях вызовов функций аpi Win32 (Win64)
- •Работа с консолью
- •Цель работы
- •Теоретические сведения
- •Консоль
- •Начальные настройки
- •Как в cmd.Exe выделять-копировать-вставлять текст
- •История ввода команд
- •Заменяющие символы в шаблонах имён
- •Выполнение работы
- •Навигация по дискам и папкам
- •Поиск файлов и папок по имени или шаблону
- •Копирование, перенос, переименование и удаление файлов
- •Создание и уничтожение папок
- •Создание текстового файла
- •Просмотр содержимого файлов
- •Поиск файлов, содержащих нужную строку
- •Состав отчета по работе
- •Состав пакета масм
- •Последовательность создания исполняемого ехе-модуля на масм
- •Режимы компоновки
- •Выполнение работы
- •Создание консольной программы
- •Создание программы с графическим интерфейсом
- •Использование шаблона простой программы
- •Состав отчета по работе
- •Параметризация макросов
- •Уникальность меток при макрорасширениях
- •Макроконстанты
- •Макропеременные и макровычисления
- •Увидеть работу макрогенератора
- •Расширенный листинг
- •Выполнение работы
- •Макроопределение и макрорасширение
- •Повторение строк repeat
- •Цикл for
- •Анализ расширенного листинга программы
- •Состав отчета по работе
- •Потоки вывода и ввода
- •Вывод и ввод в консольных приложениях
- •Invoke GetStdHandle,std_output_handle ; манипулятор возвращен в еах, ...
- •InputBuffer db 25 dup (0) ; вводной буфер фрагмент 3
- •Высокоуровневый консольный ввод-вывод с использованием макросов
- •Макрос консольного вывода print
- •Макросыконсольного вводаinput и inkey
- •Преобразование строки в число
- •Inkey "Жду кнопочку."
- •Преобразование числа в строку
- •Выполнение работы
- •Invoke ExitProcess,0 ; выход в Windows
- •Эксперимент 1. Ввод-вывод функциями Win32
- •Эксперимент 2
- •Эксперимент 3
- •Эксперимент 4
- •Состав отчета по работе
- •Последовательное выполнение команд
- •Передача управления в другое место кода
- •Возврат управления в основную программу
- •Метка_к5:
- •Jmp Метка_к5
- •Call метка_процедуры
- •Передача параметров в процедуру
- •Внутренние переменные в процедурах
- •Как компилятор ml.ExEпомогает организовать работу с процедурами
- •Автоматическое создание пролога и эпилога
- •Автоматическое размещение внутренних переменных
- •Повышение надежности и облегчение вызовов – макрос invoke
- •Выполнение работы
- •Invoke ExitProcess,0 ; выход в Windows
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Выполнение работы
Подготовка текстовых файлов для работы
По аналогии с предыдущей лабораторной работой, нам понадобятся текстовые файлы, которые мы будем анализировать и сравнивать.
Первый файл – это распечатка расширенного дампа файла coff1.exe. Его мы получим следующими действиями.
Используйте объектный файл coff1.obj, созданный в прошлой лабораторной работе. Выполните его компоновку консольной командой
\masm32\bin\Link /SUBSYSTEM:CONSOLE /OPT:NOREF coff1.obj
В результате создастся файл coff1.exe, который и является объектом исследования в данной лабораторной работе.
Выполните команду
dumpbin /all coff1.exe > coff1.exe.DUMP
В результате создастся файл coff1.exe.DUMP. Откройте его в редактореWord. Для лучшей читаемости файла ориентацию страницы в нем установите в «Альбомную» и сохраните его под именемexe.DUMP.doc. Он будет распечатан и включен в отчет по работе. В дальнейшем мы будем называть этот файл «дамп».
Второй файл – это двоичный образ файла coff1.exe.
Откройте программу HexWorkshop(вы ею пользовались в прошлой лабораторной работе), и в ней откройте файлcoff1.exe. ВыполнитеFile–Export… Появится окноExportAs. Выберите тип айла экспортаRTF(*.rtf),а имя задайтеexe.bin.rtf. После нажатия Сохранить вы получите файл требуемыйexe.bin.rtf. Откройте его воWord, задайте ориентацию страницы «Альбомная», сохраните и распечатайте для включения в отчет. Этот файл в дальнейшем будем называть «бинарник».
Исследование структуры ехе-файла
Исследование выполняется по аналогии с предыдущей лабораторной работой. Мы будем восстанавливать смысловые части ехе-файла в бинарнике.
Кладём перед собой две распечатки – дамп и бинарник. Находим в дампе очередную смысловую часть, например, FILEHEADERSVLUES. Сравнивая данные, находим в бинарнике начало этой части и (это важно!) ее окончание. Проводим в бинарнике разделяющие линии. Подписываем в бинарнике найденную часть на свободном поле справа. И так по всем смысловым частям дампа. Помним о разном представлении чисел в «позиционном» способе и «физическом» (объяснялось в прошлой лабе).
Не пропустите область «Заглушка MSDOS», подпишите ее. Найдите и выделите «РЕ-сигнатуру», подпишите ее выноской.
Вы обнаружите, что между смысловыми частями в бинарнике есть довольно обширные пустые области, заполненные нулями. Подпишите и их – «Пустая область №1», «…№2» и т.д.
Составьте карту (структуру) в виде таблицы с заголовком:
Название смысловой части – Смещение в exe-файле.
Размеченные дамп, бинарник и структуру ехе-файла поместите в отчет.
Исследование выполнения программы под отладчиком
Откройте отладчик OllyDbg(для более устойчивой работы лучше открывать его с правами администратора). В нём откройте файлcoff1.exe. Обратите внимание, что при этом открывается пустое черное окно консольного приложения.
Выполните программу пошагово.
Сначала сделаем это без захода в вызываемые процедуры. Нажимаем клавишу F8 – выполняется очередная команда – наблюдаем результат. Так делаем примерно 27 раз (на 25м нажатии в черном окне появится текст. Запомните, какая команда фрейма кода была при этом выполнена). Когда выполнится командаExitProcess(E8B9000000), программа закончится. Вернуться к исходному состоянию (сразу после открытияcoff1.exe) можно черезDebug–Restart(Ctrl-F2).
Повторим то же самое, но нажатиями F7. Вы увидите выполнение всех команд, выполнение которых отладчик не демонстрировал при выполнении очереднойCALL. Общее число шагов выполнения программы получится раза в два больше, конечно.
Создать скриншот окна OllyDbgв положении, когда очередная выполняемая команда находится по адресу 401000. Скриншот поместить в отчет по работе.