- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Копирование, перенос, переименование и удаление файлов
Сначала поясним принцип экспериментов, которые будут выполняться ниже. Мы для манипуляций скопируем часть файлов пакета MASM32, благо там их много. Но главное – не испортить исходный файловый материал. Поэтому первое, что нужно сделать – это любыми доступными вам средствами создать две рабочие папки: d:\sample1 и d:\sample2. Теперь открываем cmd.exe и – поехали! (Еще раз напоминаем, что каждая строка заканчивается нажатием клавиши Enter).
D:
Cd masm32\text
Copy *.* d:\sample1
Dir d:\sample1
Cd d:\sample1
copy blankdlg.txt d:\sample2\newname.src
dir d:\sample2
copy push3.txt ..\sample2
dir d:\sample2
copy d:\sample2\push3.txt .\push33.*
Dir
move c*.* ..\sample2\c*.new
move epilog.txt d:\sample2\epilog.newname
dir > copy-move.txt
echo ---------------------------- >> copy-move.txt
dir d:\sample2 >> copy-move.txt
ren lasterr.txt newname.*
dir
del switch.txt
dir
erase p*.*
dir
del *.* на вопрос ответить Y
dir
Скопируйте весь этот сценарий в отчет.
Скопируйте в отчет файл copy-move.txt. Письменно ответьте на такие вопросы:
Что означают символы .. в действии з) ?
Действие к). Что означает точка в части «.\push33.*»?
Действие к). Что означает * в части «.\push33.*»?
Действие с). Что означает * ?
Чем по смыслу отличаются действия у) и х) ?
Почему действие ч) запрашивает подтверждение?
Еще один практический вопрос. Действия с консолью, чего греха таить, ненаглядны, и это правда. Чтобы увидеть производимые в папках изменения, мы вынуждены всё время «заглядывать» в них командами dir (действия г), ж), и), л), о) …) . Хотелось бы упростить наблюдение, правда?
Попробуйте повторить сценарий еще раз, но держите рядом с окошком cmd открытый Total Commander с открытыми в его панелях папками SAMPLE1 и SAMPLE2. В коммандере изменения отражаются?
Повторите этот эксперимент, но вместо Total Commander откройте рядом с окошком cmd два окна Проводника, одно с папкой SAMPLE1, другое – с папкой SAMPLE2. Напишите в отчете ваши впечатления от удобства параллельного наблюдения результатов действий через TotCom и через Проводник. Какой вариант, по-вашему, предпочтительнее?
Создание и уничтожение папок
Данный сценарий является продолжением предыдущего.
Cd d:\sample2
Md folder1
md d:\sample1\papka2
copy *.txt ..\sample1\papka2
del papka2
copy pop3.txt papka2
rmdir papka2
rd papka2 /s
copy c*.* d:\sample2\folder1
ren d:\sample2\folder1 d:\sample2\newname3
ren d:\sample2\folder1 newname3
rd d:\sample2\newname3 /s /q
Переносим в отчет данный сценарий. Письменно ответить на следующие вопросы.
Что делает действие б) ?
Может ли команда md одним вызовом создать несколько вложенных друг в друга папок? Если да, то как? Проверить экспериментально.
Что произошло с папкой papka2 после действия д) ? Объясните произошедшее.
Что было выведено на экран после действия ж) ? Почему?
Чем отличается команда rd от команды rmdir?
Описать выполнение действия з). Чем отличается выполнение действия з) от действия ж) ?
Как выполнилось действие к) ? Объясните наблюдаемое.
Чем отличается выполнение действия л) от действия к) ?
Чем отличается ход и результат действия м) от действия з) ?