- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Префиксы «венгерской» нотации типов данных в описаниях вызовов функций аpi Win32 (Win64)
В данном лабораторном курсе мы встречаемся со многими идентификаторами, написанными в так называемой «венгерской» нотации, поэтому надо понимать ее смысл. Для этого и приводится данное приложение.
«Венгерская» нотация в программировании— соглашение об именованиипеременных,константи прочих идентификаторов вкодепрограмм. Своё название венгерская нотация получила благодаря программисту компанииMicrosoftвенгерскогопроисхожденияЧарльзу Симони(венг.Károly Simonyi), предложившему её ещё во времена разработки первых версийMS-DOS. Эта система стала внутренним стандартом именования в фирме Майкрософт.
Суть венгерской нотации сводится к тому, что имена идентификаторов предваряются заранее оговорёнными префиксами, (отражающими, как правило, тип переменной) состоящими из одного или нескольких символов. При этом, как правило, ни само наличие префиксов, ни их написание не являются требованиемязыков программирования, и у каждого программиста (или коллектива программистов) они могут быть своими. Префикс именине задаёттип объекта, он простоподсказываетчитающему исходный текст человеку, какого типа та или иная переменная, что облегчает понимание.
Таблица А.1 - Префиксы, соответствующие типу
Префикс |
Сокращение от |
Смысл |
Пример |
s |
string |
строка |
sClientName |
sz |
zero-terminated string |
строка, ограниченная нулевым символом |
szClientName |
n, i |
number, int |
целочисленная переменная |
nSize, iSize |
l |
long |
длинное целое |
lAmount |
b |
boolean |
булева переменная |
bIsEmpty |
a |
array |
массив |
aDimensions |
t, dt |
time, datetime |
время, дата и время |
tDel, dtShipm |
p |
pointer |
указательна… |
pBox |
lp |
long pointer |
дальний указатель на… |
lpBox |
r |
reference |
ссылкана… |
rBoxes |
h |
handle |
дескриптор |
hWindow |
m_ |
member |
переменная-членкласса |
m_sAddress |
g_ |
global |
глобальная переменная |
g_nSpeed |
C |
class |
класс |
CString |
T |
type |
тип |
TObject |
I |
interface |
интерфейс |
IDispatch |
v |
void |
отсутствие типа |
vReserved |
Работа с консолью
Цель работы
Научиться выполнять в консоли основные действия в файлами, папками и по поиску данных на диске. Создать начальный навык работы с консолью, убедиться, что многие действия в консоли выполняются нисколько не хуже, а порой и лучше, чем в графическом интерфейсе пользователя (GUI) операционной системы (ОС) Windows. На основании этого снять предубеждение, что «консоль – это плохо».
Теоретические сведения
Консоль
В любой операционной системе существует возможность использовать так называемые консоли.
Консоль – это логическая комбинация устройства ввода в компьютер и устройства вывода из компьютера, причем и ввод, и вывод происходят исключительно в виде текста.
Реализовать консоль можно разными способами, лишь бы имелась возможность а) вводить текст и б) показывать выводимый текст. К примеру, в старинных компьютерах в качестве консоли использовали электрическую печатающую машинку. С ее клавиатуры можно было вводить информацию, а ответы печатались ею на бумаге. Сейчас консоль (например, в ОС Windows) - это а) клавиатура как устройство текстового ввода в сочетании с б) окном какой-нибудь программы, способным отображать выводимый текст. В качестве такой программы применяют, например, CMD.EXE или PowerShell, но, в принципе, возможны и другие варианты.
Консольный интерфейс исторически применялся в компьютерах первым (после 1976 г. всё шире стал применяться GUI), но не утратил актуальности и поныне. Просто у него своя специфическая область применения (чаще всего в системном администрировании), где он по многим резонам предпочтительнее и удобнее.