- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Программные инструменты для работы
Для выполнения этой (и следующей) работы нам понадобятся следующие программные инструменты:
Консоль cmd.exe. Она доступна как стандартная программа Windows, тут проблем никаких.
байтовый редактор файлов. Вы вправе использовать любой доступный, но мы, перебрав пяток разных, остановили свой выбор на программе Hex Workshop v6.7 фирмы BreakPoint Software Ltd, что и вам рекомендуем. Скачайте и установите ее на свой компьютер.
Кроме программных инструментов, нам понадобятся цветные маркеры. Не фломастеры, дающие густую закраску, а широкие маркеры, дающие прозрачный след. Мы ими будем выделять текст на распечатках и нужно, чтобы выделенный маркерами текст легко читался. Нам понадобятся маркеры, как минимум, трёх цветов – патриотичные желтый с голубым и какой-нибудь отличающийся третий, можно любой на ваш выбор.
Изготовление файлов для сравнений
В этой работе мы будем исследовать ту же программу, что и в прошлой лабе – coff1.asm и всякие дополнительные файлы, которые мы будем изготавливать из неё.
Первое, что нам понадобится – это созданный в прошлой лабораторной работефайл расширенного листингаcoff1.asm.elst. Договоримся в дальнейшем называть его для краткости «листинг». Он у нас есть.
Второй файл, который нам понадобится – это объектный файл coff1.obj. Он тоже есть в прошлой лабораторной работе, поэтому создавать его снова нет необходимости, берём оттуда. Собственно, он – это и есть объект нашего исследования. Но его исследовать в состоянии «как есть» крайне неудобно, практически невозможно, по той простой причине, что он – двоичный, а структуру его мы не знаем. Поэтому будем вскрывать его внутренности другими средствами..
С этой целью сейчас мы из него создадим второй и третий файлы, с которыми мы и будем фактически работать.
Второй файл, назовем его«расширенный дамп объектного файла», получается так.
Сначала создадим командный файл dump.bat:
@echo DUMPBIN %1
@dumpbin /all %1 > %1.dump
Pause
И затем выполнить dump coff1.obj. Будет создан текстовый файл coff1.obj.dump. Создайте из него документ coff1.dump.doc, потому что вам придется его распечатывать, размечать, а это лучше делать с документом Worda, чем с неформатированным текстом. Файл coff1.dump.doc – это и есть «расширенный дамп». Договоримся в дальнейшем называть его для краткости словом «дамп».
Третий файл, назовём его «двоичное представление объектного файла», создается с помощью hex-редактора Hex Workshop.
Откройте Hex Workshop, в нём откройте файл coff1.obj. Не спутайте – именно obj, а не asm! Любые открытые в этом редакторе файлы внешне выглядят одинаково. Этому редактору «глубоко фиолетово», какого типа файл, он любой файл открывает просто как цепочку байт, поэтому будьте внимательны. Выполните File – Export…, Имя файла – coff1.bin.rtf, тип файла – RTF(*.rtf). Откройте coff1.bin.rtf в Word, ориентируйте страницу «по-альбомному» (нам в документе понадобится свободное поле справа для дописок), сохраните файл. Готово. Файл coff1.bin.rtf – это и есть третье требующееся нам «двоичное представление объектного файла». Файл в нем показывается в формате трёх колонок:
-
Смещение (hex)
первого байта из 16-ти
Числовые hex-представления 16 байтов
Символьное представление тех же байтов
1
2
3
00000000
00000010
00000020
00000030
00000040
4C 01 03 00 1E D9 46 53 C0 02 00 00 11 00 00 00
00 00 00 00 2E 74 65 78 74 00 00 00 00 00 00 00
00 00 00 00 39 00 00 00 8C 00 00 00 C6 00 00 00
00 00 00 00 09 00 00 00 20 00 50 60 2E 64 61 74
61 00 00 00 39 00 00 00 00 00 00 00 2D 00 00 00
L . ┘FS└ .. ...
.....text.......
....9...М...╞...
.... ... .P`.dat
a...9.......-...
Рисунок 4.1 - Структура бинарного представления объектного файла после экспорта из Hex Workshop.
Если байт невозможно отобразить символом, в третьей колонке используется точка.
Договоримся в дальнейшем для краткости называть этот файл «бинарник».
Итак, мы имеем три файла для работы:
coff1.asm.elst, кратко – «листинг»;
coff1.dump.doc, кратко – «дамп»;
coff1.bin.rtf, кратко «бинарник».
Распечатать все три файла, они должны присутствовать в отчете.