- •Системное программирование на макроассемблере 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
Методические указания к лабораторным работам
по нормативной дисциплине
«Системное программирование» студентов профессионального направления 6.050102 «Компьютерная инженерия»
Обсуждено и рекомендовано
на заседании кафедры
информационных и компьютерных систем, протокол № от . .20 г.
Чернигов ЧНТУ 2014
	Системне програмування на макроасемблері
	MASM32. Методичні вказівки до лабораторних
	робіт с нормативної дисципліни «Системне
	програмування» (частина 1) студентів
	професійного напряму 6.050102 «Комп’ютерна
	інженерія»/ Укл. Нестеренко С.О. –
	Чернігів: ЧНТУ, 2014. - 
Укладач: Нестеренко Сергій Олександрович, кандидат технічних наук, доцент
Відповідальний за випуск: Казимир Володимир Вікторович, завідувач кафедри інформаційних та комп’ютерних систем, доктор технічних наук, професор
Рецензент: Акименко Андрій Миколайович, кандидат фізико-математичних наук, доцент кафедри інформаційних та комп’ютерних систем Чернігівського національного технологічного університету
Содержание
ВСТУПЛЕНИЕ 4
4
1 РАБОТА С КОНСОЛЬЮ 6
2 ТЕХНОЛОГИЯ СОЗДАНИЯ АССЕМБЛЕРНЫХ ПРОГРАММ 15
3 МАКРОГЕНЕРАТОР И МАКРОСЫ 23
4 КОНСОЛЬНЫЙ ВВОД-ВЫВОД 34
5 МЕХАНИЗМ ИСПОЛЬЗОВАНИЯ ПРОЦЕДУР 44
6 ИССЛЕДОВАНИЕ ОБЪЕКТНЫХ ФАЙЛОВ ФОРМАТА COFF 62
7 ИССЛЕДОВАНИЕ ИСПОЛНЯЕМОГО ЕХЕ-МОДУЛЯ 70
РЕКОМЕНДОВАННАЯ ЛИТЕРАТУРА 78
Вступление
Программирование на уровне машинных команд (низкоуровневое) является незаменимым для многих направлений информационных технологий: создание эффективных прикладных программ и драйверов, обратная разработка (reverse engineering), криптография, защита информации и многих, многих других. Причина проста – если вы хотите узнать, что в действительности делает программа – загляните в ее машинный код.
Программными абстракциями машинного кода являются ассемблеры – особые языки программирования, в которых один оператор соответствует одной команде процессора. Ассемблеров существует множество хотя бы потому, что существует множество процессоров с разными наборами исполняемых ими машинных команд. Более того, для одного и того же процессора (к примеру, с архитектурой IA-32/x86) создано несколько ассемблеров с различающимся синтаксисом: tasm, masm, nasm, fasm… Они различаются синтаксисом, эффективностью поддержки разработчиков и функциональной проработанностью. Для разработчиков наибольшее значение имеют, конечно же, функциональность и эффективная поддержка. В этом смысле среди всех известных ассемблеров заметно выделяется Microsoft Macro Assembler, который известен под аббревиатурой MASM32 (32 означает, что поддерживается разработка 32-разрядных приложений). (В дальнейшем изложении мы будем использовать также аббревиатуру «МАСМ», которую следует понимать как «32-разрядный макроассемблер Microsoft MASM32»). МАСМ постоянно поддерживается и развивается корпорацией Microsoft и распространяется ею бесплатно, что, разумеется, способствует усилению его популярности. Именно поэтому МАСМ выбран кафедрой как целевой язык низкоуровневого программирования для изучения в курсе «Системное программирование».
Лабораторный практикум по системному программированию построен по принципу сочетания обязательных работ и работ, выполняемых по желанию студента. В данных методических указаниях приводятся описания только семи обязательных лабораторных работ, выполнение и защита которых может без чрезмерных трудозатрат принести студенту честно заработанную положительную оценку в диапазоне 60-65 баллов ЕКТС. Для получения более высоких оценок по курсу студент должен самостоятельно выполнить и защитить дополнительные работы, содержание и объем которых доводится до студентов в начале семестра изучения настоящей дисциплины. По этим дополнительным работам имеются отдельные методические указания, доступ к которым поможет получить преподаватель, ведущий лабораторные занятия.
