
- •Системное программирование на макроассемблере 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
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Карта размещения программы в виртуальной оперативной памяти
Составить карту размещения секций программы в виртуальной памяти процесса по примерному виду на рис.5.4. Масштаб смещений на рисунке соблюдать не будем, нам важно только относительное расположение элементов рисунка.
Рисунок 5.4 – Примерный вид карты размещения программы в виртуальной памяти процесса.
Пользуясь отладчиком с открытой в нем программе и, зная названия секций из дампа, заменить в своем рисунке слова «Название секции» на системное имя каждой секции, а СМЕЩЕНИЕ – на числовое смещение соответствующей секции в памяти. Учтите, что, кроме секций из дампа, у вас будут еще две – секция стека и секция кода ядра, покажите и их. В секции кода ядра покажите выноской и адресом примерное положение точки входа в программу, она в секции кода ядра. Составленную карту разместить
Действительные ссылки, бывшие раньше неразрешенными
Смотрим в скриншот отладчика, фрейм кода. Рядом кладём распечатку бинарника, смотрим на секцию RAWDATA#1. И еще открываем листинг из прошлой лабы, ссмотрим на секции кода (.code). Понятно, что во всех трёх местах мы видим одно и то же – код программы. Ценность такого «тройного взгляда» в том, что мы видим, как показываются ссылки в листинге, в бинарнике и чему они окончательно равны в период исполнения программы.
Составить таблицу ссылок в формате
В листинге |
В бинарнике ехе-файла |
В отладчике |
A1 00000000 R Mov EAX, Num1 |
A1 00 30 40 00 |
A1 00304000 MOV EAX,DWORD PTR DS:[403000] |
В составленной таблице ссылки выделить цветом.
В бинарнике в секции RawData#1 все ссылки (уже действительные, рабочие) пообводить рамочками и повыделять цветным маркером.
Составленную таблицу ссылок – в отчет.
Заключительное замечание. Проделанная здесь работа не ставила своей целью раскрытие абсолютно полной структуры изучаемого типа фалов. Для этого существуют полные формальные описания в документации. Мы здесь практически показали возможность экспериментального восстановления структуры незнакомого файла имеющимися программными средствами, получили наглядное общее представление о ней.
Состав отчета по работе
Номер и название работы, фамилия и группа студента.
Цель работы.
Протокол выполнения работы с текстами ответов на все вопросы в заданиях пункта «Выполнение работы». Все упомянутые в «Выполнении работы» распечатки, таблицы, схемы и рисунки.
Развернутые выводы по работе.
Вопросы для самопроверки
Какой цели служит создание ехе-файлов?
Тождественны ли понятия «ехе-файл» и «программа»?
Какую пользу приносит использование отладчиков уровня приложения?
Что такое виртуальная оперативная память? Как она соотносится с физической?
Какая секция программы расположена по самым маленьким адресам виртуальной памяти?
Как расположена в виртуальной памяти точка входа в консольную программу относительно других секций программы?
Рекомендованная литература
Рихтер Дж. WINDOWS для профессионалов: Создание эффективных Win-32 приложений с учетом специфики 64-разрядной версии Windows / Пер. с англ. — 4-е изд. — СПб.: Питер; М.:Издательство «Русская редакция»; 2008 — 720 с., ил.
Фролов А., Фролов Г.:Защищенный режим процессоров Intel 286 / 80386 / 80486 .— М.:Диалог-МИФИ, 1993.— 234 с.
Финогенов К. Г. Win32. Основы программирования .— М.:Диалог-МИФИ, 1999.— 342 с.