- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Выполнение работы
Ниже вам будут предложены несколько сценариев для самостоятельного выполнения. Это – учебные эксперименты по изучению некоторых (далеко не всех) консольных команд. Все эти действия нужно выполнять не торопясь, внимательно наблюдая за результатами. Если результат не вполне понятен, почитайте справку по команде (обычно ключ /?) и повторите эксперимент. После отработки сценария вам нужно будет ответить на вопросы, относящиеся к нему. Вполне возможно, что для успешного ответа иногда придется повторить некоторые действия сценария, это нормально.
Навигация по дискам и папкам
Далее не торопясь, наблюдая результаты, выполнить в консоли следующее:
C: Enter
Cd \ Enter
Cd u, далее повторно нажимать Tab, пока не дойдете до Users, ввести \, повторноTab до своего имени пользователя, Enter.
Cls enter
Dir enter. Alt-PrintScreen сделает скриншот1. Сохранить скриншот.
D: enter
Cd \ enter
Cd m tab…tab до появления MASM32, enter
Cls enter
Dir /w enter. Alt-PrintScreen сделает скриншот2. Сохранить скриншот.
Для выполнения консольной команды после её ввода всегда надо нажать Enter. В этом сценарии мы везде указали это явно, но давайте договоримся, что далее этого очевидного действия мы писать не будем, это подразумевается.
Скопируйте весь этот сценарий в отчет.
Приведите в отчете письменные объяснения по таким вопросам:
Каков смысл действий а) и е) ?
Что делает cd \ ?
Какую роль выполняет Tab в действиях в) и з) ?
Что делает cls?
Вставить в отчет скриншоты 1 и 2 (пункты д) и к) ).
Пояснить на примере этих скриншотов, чем отличается выполнение dir от выполнения dir /w.
Поиск файлов и папок по имени или шаблону
Есть две альтернативные команды для поиска файлов и папок: уже знакомая нам dir и вторая команда – where.
Делаем (и внимательно наблюдаем за происходящим) в консоли:
Перейти в исходное состояние: как после действия г) предыдущего пункта.
Ознакомиться с dir /?
Echo -----------------------------------dir1 > dir1.txt
DIR /b /s /a-d d:\masm32\masm*.* >> dir1.txt
Type dir1.txt
Echo -----------------------------------dir2 >> dir1.txt
DIR /b /s /ad d:\masm32\m*.* >> dir1.txt
Type dir1.txt
Where /?
Echo --------------------------where1 > where1.txt
Where /r d:\masm32 masm*.* >> where1.txt
Echo --------------------------where2 >> where1.txt
Where /r d:\masm32 /f masm*.* >> where1.txt
Type where1.txt
Скопируйте весь этот сценарий в отчет.
Описать в отчете работу dir по поиску файлов и папок. Для этого поместить в отчет файл dir1.txt и письменно осветить такие вопросы:
Как сработала часть «> dir1.txt» в действии в) ?
Словами изложить, что делалось в действии г) ?
Как сработала часть «>> dir1.txt» в действии г) ?
Чем отличаются операции > и >> в командной строке?
Что сделали действия д) и з) ?
Словами изложить, что делалось в действии ж) и чем оно отличаетсяот действия г) ?
Описать в отчете работу where по поиску файлов. Для этого поместить в отчет файл where1.txt и письменно осветить такие вопросы:
Что делало действие л) ?
Что делало действие н) и чем оно отличается от действия л) ?
Отдельно напишите, как следует нам поступать, если нужно получить список только папок (без файлов), входящих в заданную папку.