- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Начальные настройки
Win-R, cmd, enter откроет окно консоли. Щ по угловой картинке, Свойства, вкладка Цвета. Задайте цвет фона экрана посветлее, Текст на экране черный, OK. Мы дальше будем делать скриншоты этого окна для помещения в отчет. Если окно черное, картинки будут неважного качества, и расход тонера принтера будет неоправданно большим. Черный текст на светло-сером (или белом) гораздо лучше.
Чем делать скриншоты? Чем вам удобнее. Можно Ножницами (стандартная утилита Windows 7+), можно просто Alt-PrintScreen. А если не лень, поставьте себе Techsmith Jing, очень удобная программка, мы пользуемся ею.
Далее предполагаем, что пакет MASM32 установлен у вас на d:\. Если не так, советуем перенести его туда. Это можно сделать просто переносом в Проводнике, никаких манипуляций по переинсталляции не требуется.
Как в cmd.Exe выделять-копировать-вставлять текст
Работая с окном cmd.exe, вы не сможете пользоваться привычными комбинациями Ctrl-C, Ctrl-V, потому что cmd.exe воспринимает клавишу Ctrl как простую буквенную.
Любой текст на экране cmd.exe можно выделить, просто «протащив» по нему указатель мыши при нажатой левой кнопке. Отпускаете левую кнопку мыши и два раза щёлкаете правой («целиться» мышью при этом никуда не надо). Первый щелчок правой кнопкой скопирует выделенное в буфер обмена, второй – вставит его в командную строку (только туда, другого места вставки cmd.exe не допускает).
История ввода команд
Программа cmd.exe запоминает историю ввода в командную строку в текущем сеансе работы.. По этой «истории» можно двигаться назад, нажимая стрелку «вверх», а стрелка «вниз» перемещает по истории вперёд.
Значит, если вам нужно поместить в командную строку команду, которую вы уже раньше вводили в текущем сеансе, просто повторно нажимайте «вверх», пока не увидите нужную команду. После этого нажимайте Enter, команда будет выполнена.
Заменяющие символы в шаблонах имён
Когда операционная система ищет файлы на диске по названию, то производится сопоставление названия очередного файла на диске с заданным поисковым названием (образцом).
«Название» файла состоит из «имени» (часть названия до последней точки в нём) и «расширения» (часть названия после последней точки). Имя файла и расширение рассматриваются как отдельные строкии сравниваются с соответствующими образцами по отдельности.
Сравнение, предположим, имени файла с именем-образцом производится по алгоритму сравнения строк, то есть попарным сравнением символов от начала строк к концу. Строки равны, если попарно совпадают все символы имени с соответствующими символами образца.
Вот тут-то и возникает идея использовать особые символы для ускорения процедуры сравнения и расширенной трактовки результата сравнения.
Символ * пишут в образце на нужной позиции. На этой позиции попарное сравнение символов прерывается и условно считается, что оставшиеся «хвосты» строк совпадают:
В этом примере общий результат сравнения имени с образцом трактуется как «имя совпало с образцом».
Показанный тут пример образца поиска «МА*» словами можно объяснить так: «все строки, которые начинаются с МА». Что находится в сравниваемых строках дальше, после МА, значения не имеет.
Второй шаблонный символ – это знак вопроса ?, который обрабатывается по аналогии с карточным джокером – он считается совпадающим с любым другим символом. То есть символы в позиции ?-«джокера» фактически не сравниваются, но результат сравнения условно считается «символы совпадают».
Образцы для поиска, в которых используются символы * и ?, также называют шаблонами (реже – масками) поиска.
Несколько примеров с пояснениями.
А*.b* - все файлы с именами, начинающимися с А, и расширениями, начинающимися с b.
?r*.* - файлы, у которых вторая буква имени есть r.
Prog.?? – файлы с именем Prog и расширением из двух символов.
????.* - файлы с именами из четырёх символов.