- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Состав отчета по работе
Номер и название работы, фамилия и группа студента.
Цель работы.
Протокол выполнения работы с текстами ответов на все вопросы в заданиях пункта «Выполнение работы».
Выводы по работе.
Вопросы для самопроверки
Что такое макроопределение?
Как выполняется расширение макроопределения с параметрами?
Как обеспечивается уникальность меток в исходном тексте при многократных вставках одного и того же макроса с метками?
Как получить расширенный листинг компиляции ассемблерного модуля?
Как происходит расширение макровызова invoke?
КОНСОЛЬНЫЙ ВВОД-ВЫВОД
Цель работы
Изучить основные возможности ввода-вывода, применяемые в консольных приложениях Windows.
Теоретические сведения
Основы взаимодействия прикладных программ и ОС Windows
Структура логических уровней компьютера может быть упрощенно показана как на рис. 6.1:
-
Прикладные программы
Программный интерфейс приложений (АРI) Win32
Уровень операционной системы
Ядро ОС
Уровень абстрагирования от аппаратуры (HAL)
Аппаратура и периферийные устройства
*** *** *** Внешний мир *** *** ***
Рисунок 6.1 – Логические уровни компьютера
Прикладная программа обрабатывает данные за счет собственных ресурсов и при помощи своего алгоритма. Но всякое «общение» программы с внешним миром (пользователь – это тоже часть внешнего для программы мира) производится только с помощью ввода с периферийных устройств и вывода на них. В целях защиты компьютерной системы прикладные программы изолированы от прямого управления аппаратурой и для вывода-ввода должны запрашивать сервис от операционной системы. Запросы подобного рода производятся вызовами процедур и функцийпрограммного интерфейса приложений(Application Program Interface, API), который в ОС Microsoft Windows имеет официальное имя Win32 (илиWin64). Их неформально еще называют «WinAPI». Чтобы вызовы API стали возможны и выполнялись правильно, при написании программы в ней следует прописывать директивы доступа к соответствующим прототипам и библиотекам (файлам типов inc и lib). Все примеры из пакета MASM32, рассматриваемые нами в лабораторных работах, подобные директивы имеют.
Потоки вывода и ввода
В ОС Windows, как и во многих других, в отношении ввода-вывода применяется абстракция «файл». В информатике, в самой общей трактовке, используют следующее определение: файл — это поименованная линейная последовательность байтов. В файловых системах доступ к файлам осуществляется посредством использования их имен. Файлы, вообще говоря, допускают с собой всего два действия – чтение данных из них, и запись данных в них. Тщательно и универсально прописав алгоритмические механизмы всего этих двух действий, программисты получили в распоряжение очень универсальные и удобные инструменты обмена данными. Настолько универсальные и удобные, что разработчики операционных систем теперь стараются их использовать везде, где есть необходимость обмениваться данными. Поэтому как «файлы» используются, кроме настоящих дисковых файлов, следующие сущности:
области данных (необязательно на диске);
устройства (порты - как физические, так и виртуальные);
потоки данных («именованный канал»);
сетевые ресурсы, сокеты;
другие объекты операционной системы.
В ОС Windows c открытым файлом (и не только с файлами) связывается манипулятор («handle», жаргонное «хандлер»). Это индекс в таблице описателей объектов, с которыми работает ОС. То есть, если пользователь (его программа) желает получить доступ к файлу, то нужно сначала знать индекс («хандлер») описателя этого файла. «Описатель файла» – это структура, в которой записаны все свойства файла – его имя, права доступа к нему, режимы чтения/записи/дозаписи/перезаписи, указатель на буфер обмена, флаги блокировки и т.п. Механизм доступа, таким образом, следующий. По индексу-манипулятору (хандлеру) читается описатель. По полям описателя определяют, доступен ли файл. По полю-указателю описателя переходят на буфер файла в памяти, в нём по известному смещению читают/пишут байты. Забота про обмен данными между буфером и самим физическим файлом не входит в область ответственности программ, этим занимается контроллер файла.
Если на абстрактный объект вида «последовательный файл» накладывается еще дополнительное ограничение – запрет на обратное перемещениеотносительно текущей позиции в файле, то получается еще одна часто используемая информационная абстракция – «файловый поток» или просто «поток». Получается, что из входного потока можно только читать всё новые и новые порции данных, но повторно перечитать ранее прочитанное нельзя. Аналогично, в выводной поток можно передавать все новые и новые данные, но «перемотать поток назад» и переписать часть его содержимого по-другому нельзя. Нетрудно видеть, что всё это очень похоже на события, которые в реальном мире связаны со временем их совершения (во времени обратно двигаться нельзя по физике нашего мира, а в потоке – по договоренности, но аналогия есть). Абстракция «поток» и придумана для моделирования «событий во времени».