- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Режимы компоновки
Компоновщик LINK.EXE способен создавать ехе-модули, которые вызываются на исполнение как консольные программы (ключ /SUBSYSTEM: CONSOLE). Они исполняются с использованием окна программы cmd.exe, которое автоматически открывается при их запуске. Такие программы малы по размеру, исполняются быстро и потребляют очень мало ресурсов. Правда, имеют скромный символьный интерфейс.
Программы с графическим интерфейсом пользователя (GUI – Graphic User Interface) также можно создавать на макроассемблере. По сравнению с консольными программами они должны создаваться не только из исходного файла и подключаемых библиотек. Для такой программы дополнительно нужно создать т.н. «ресурсный файл» (*.rc), в котором на макроязыке описываются все графические компоненты интерфейса – кнопки, иконки, поля текстового ввода-вывода и т.п. Для создания подобных файлов обычно используются специальные приложения.
Ресурсные файлы нужно откомпилировать специальным компилятором ресурсов. Их в МАСМе целых два – rc.exe и porc.exe, оба лежат в \bin. Результатом компиляции является «ресурсный объектный файл», с расширением res.
На этапе компоновки LINK.EXE собирает ехе-модуль не только из obj- и lib-файлов, но подключает также и res-файлы(ы) (ключ /SUBSYSTEM: WINDOWS). Получившийся ехе-модуль запускается в GUI-программу.
Выполнение работы
Создание консольной программы
На данном этапе мы не ставим перед вами задачу самостоятельного написания какой-нибудь ассемблерной программы. Воспользуемся готовым примером. Заодно проведете первичное знакомство «как оно на МАСМе всё делается». Итак, делаем вот что.
Скопируйте в d:\sample2 файл :\MASM32\examples\exampl03\textio\ textio.asm. Откройте его в Notepad++, посмотрите, что там написано, попытайтесь себе хоть как-то объяснить наблюдаемое, это очень поможет в дальнейшем. Скопируйте этот файл в отчет по работе.
Откройте консоль и перейдите на d:\sample2. Рядом откройте окно Проводника с этой папкой, чтобы не обращаться каждый раз к dir для наблюдения за результатами. Все выполняемые по данному сценарию действия записывать в отчет и описывать наблюдаемые результаты.
Обеспечьте вызов компилятора и компоновщика изменением строки path, т.е. выполните path=d:\masm32;d:\masm32\bin;d:\masm32\lib;d:\masm32\include;%path%
Откомпилируйте исходник ml /c /coff textio.asm Что нового показал Проводник? Записать в отчет наблюдаемое.
Ml /? Прочитать и внести в отчет, что означают ключи /c и /coff.
Проведите компоновку ехе-модуля Link /SUBSYSTEM:CONSOLE /OPT:NOREF textio.obj
Что нового появилось в папке (смотреть в Проводник)? Записать в отчет наблюдаемое.
Link /? Выяснить смысл ключей /SUBSYSTEM:CONSOLE и /OPT:NOREF, записать в отчет.
Выполнить textio.exe. Скриншот программы внести в отчет.
Создание программы с графическим интерфейсом
Повторим предыдущий сценарий, но будем создавать теперь программу с графическим интерфейсом на основе готового примера.
Скопировать в d:\sample2 файл minimum.asm из папки d:\MASM32\examples\exampl01\minimum\.
Прочесть его в редакторе, скопировать в отчет.
ml /c /coff /nologo minimum.asm Действие выполнить, команды вносить в отчет без дополнительных напоминаний.
Что нового появилось в папке? Чем отличается выполнение этой компиляции от действия г) в п.2.3.1? Записать в отчет. Выяснить, что такое ключ /nologo и записать это в отчет.
Выполнить Link /SUBSYSTEM:WINDOWs minimum.obj. Изменения в папке записать в отчет.
Выполнить minimum.exe. Скриншот программы внести в отчет.