
- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Создание текстового файла
Проще всего копированием «с консоли в файл». Выполняем:
Copy con 1.s
Текстовые строки
вводятся последовательно.
В конце каждой строки нажимать Enter.
Конец ввода текста - F6 или Ctrl-Z и Enter.
Dir
Echo Строка1 >> 2.txt
Echo Строка два >> 2.txt
Echo строка №3 >> 2.txt
Dir
Type 1.s
Type 2.txt
Скопировать данный сценарий в отчет. Письменно ответить на следующие вопросы:
Если вы уже выполнили действия б), в) и г), то можно ли вернуться назад и строку «вводятся последовательно.» перередактировать по-новому?
Чем принципиально отличается технология создания файла действиями а)-д) от технологии в действиях ж) – и) ?
Просмотр содержимого файлов
Консольные команды просмотра любой файл трактуют как текстовый.
Работаем с созданными ранее папками d:\SAMPLE1 и d:\SAMPLE2. Выполнить действия:
D:
Cd sample1
Type blankdlg.txt
Type p*.*
type d:\masm32\tview.exe (прослушать звуки)
Cls
copy comment1.txt con
copy comment1.txt+s*.* con
type d:\masm32\tproc.txt | more
Нажать несколько раз Enter, смотреть результат.
Нажимать пробел, наблюдать результат.
more < pop3.txt push3.txt switch.txt
more < d:\masm32\tproc.txt
more /?
Перенести данный сценарий в отчет. Ответить на вопросы:
Сколько способов просмотра одиночного файла вы наблюдали в данном сценарии?
Можно ли одним вызовом просмотреть содержимое сразу нескольких файлов?
Чем объяснить необычные визуальные и звуковые эффекты, которые сопровождают просмотр двоичных (не текстовых) файлов?
Допускает ли команда more последовательный просмотр сразу нескольких файлов, расположенных в разных папках?
Поиск файлов, содержащих нужную строку
Выполнить сценарий:
find "pop edi" pop3.txt
find /n "pop" *.*
find /n "push" d:\masm32\*.ini*
findstr "push edi" *.*
findstr /c:"push edi" *.*
findstr "push pop edi" *.*
findstr /e "push pop edi" *.*
Перенести данный сценарий в отчет. Ответить на вопросы:
Какие особенности выполнения команды find создает применение ключа /n?
Команда findstr, вопрос про ключ /с. Почему результат выполнения действий г) и д) отличаются?
Написать словами, что выполняет действие ж).
Если вам нужно в группе файлов найти или слово1, или слово2, или слово3 в одном вызове, какую команду вы примените – find или findstr? Почему?
В группе ассемблерных исходников нужно найти все строки, которые начинаются со слова “invoke”. Написать соответствующий консольный вызов.
Состав отчета по работе
Фамилия, инициалы и группа студента.
Заголовок работы, цель работы.
Протоколы выполнения всех сценариев раздела «Выполнение работы» и письменные ответы на задаваемые по каждому сценарию вопросы.
Выводы по работе.
Вопросы для самопроверки
Что такое консоль? Как производится работа с ней?
Что такое история ввода команд? Как она используется при работе с консолью?
Какую роль играет клавиша Tab при ручном вводе консольных команд?
Что означают команды @, > и >> в пакетных файлах?
ТЕХНОЛОГИЯ СОЗДАНИЯ АССЕМБЛЕРНЫХ ПРОГРАММ
Цель работы
Освоить технику создания программ в SDK MASM32. Изучить использование шаблонов ассемблерных программ. Экспериментально изучить работу макрогенератора.
Теоретические сведения
На что опирается программирование на ассемблере
Программировать на ассемблере – значит писать программы практически на уровне машинных команд. Ассемблеры – это такие языки программирования, в которых каждой машинной команде процессора сопоставляется один оператор. (Примечание. В ассемблеры также включаются всякие дополнительные средства для облегчения программирования, но главная их особенность именно эта – одна процессорная команда может изображаться одним оператором). Для превращения исходного текста в исполняемый exe-модуль применяются компилятор (переводчик текста в машинный код) и компоновщик (он связывает вместе отдельные функциональные секции машинного кода и создает ехе-модуль). Язык ассемблерного программирования, включающий возможность описания и использования макроподстановок (макросов), традиционно называют «макроассемблер». Среди макроассемблеров самым проработанным и удобным заслуженно считается Microsoft Macroassembler, сокращенно – MASM (МАСМ). Его 32-разрядная разновидность называется MASM32.
Корпорация Microsoft включает в пакеты Visual C++ и Visual Studio компилятор макроассемблера ML.EXE и компоновщик LINK.EXE, которые являются необходимыми компонентами среды разработки программных приложений (IDE). Эти качественные программные компоненты можно использовать и сами по себе (чем мы и будем заниматься в этом курсе), вне упомянутых сред программирования. Корпорация Microsoft не рассматривает их как отдельные товарные продукты на рынке программного обеспечения и не препятствует их свободному бесплатному использованию кем угодно.
Многие энтузиасты создают собственные пакеты для программирования на макроассемблере, базирующиеся на использовании ML.EXE и LINK.EXE. Наиболее успешной следует считать деятельность группы Стива Хатчисона (Австралия), которые бесплатно распространяют и поддерживают пакет МАСМ, доступный в Сети по адресу http://www.МАСМ.com/masmdl.htmдля скачивания как минимум с семи зеркальных серверов.
Пакет МАСМ содержит множество ресурсов, которые дополняют ML.EXE и LINK.EXE до работоспособного набора поддержки разработчиков ассемблерных программ (Software Developer’s Kit, SDK). Более подробно о составе МАСМ и назначении его компонент речь пойдет ниже.
И, наконец, существует множество фирм, инициативных групп и отдельных программистов, которые создают и даже нередко сопровождают всякие дополнительные программные средства для программирования на всевозможных ассемблерах – и МАСМ, и nasm и fasm и всяких иных. В конце концов, фирма Intel открыто публикует сведения об архитектуре и системе команд своих процессоров, и на этой базе даже одному человеку под силу написать «свой ассемблер», примеров чему мы находим в Интернете множество.
Говоря здесь о «дополнительных программных средствах», мы имеем в виду (по версии сайта http://www.wasm.ru/) такой (неполный) список классов программ:
образовательные программы;
SDK и IDE;
редакторы ресурсов;
дизассемблеры;
отладчики;
модификаторы;
инсталляторы;
распаковщики;
упаковщики;
средства криптографии;
средства работы с реестром;
редакторы байт-кода…
Столь обширный перечень одних только классов программ говорит о том, что при разработке системных программ на ассемблере программисты встречаются с огромным множеством особых, нестандартных, специфических ситуаций, для преодоления которых и создаются эти инструменты. С некоторыми из них мы познакомимся в курсе лабораторных работ по СП.