дополнительное задание 1 безопастность операционных систем. Программа debug используется для тестирования и отладки исполняемых программ. Программа debug показывает код и данные программы в шестнадцатеричном формате, и любые данные,
Скачать 0.96 Mb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Дополнительное задание №1 по дисциплине «Безопасность операционных систем» Группа: АБс-023 Студент: Лозин В. В. Преподаватель: Зырянов С.А. Новосибирск, 2022 Цель работы: ознакомиться с вводом программ в память и отслеживанием (трассировкой) их выполнения. Задания: Научиться использовать программу DEBUG. Научиться просматривать области памяти. Научиться использовать непосредственные данные. Научиться использовать ранее определенные данные. Научиться вводить программы на языке Ассемблера. Научиться использовать инструкции INT. Научиться использовать оператор PTR. Ход работы: Использование программы DEBUG. Запускаем командную строку от имени Администратора. При помощи команд debug /? просмотрим основные параметры использования данной команды и при помощи команды debug -? посмотрим основные команды для debug (рисунок 1.1). Рисунок 1.1 – Основные параметры и команды для debug Программа debug используется для тестирования и отладки исполняемых программ. Программа debug показывает код и данные программы в шестнадцатеричном формате, и любые данные, которые вводятся в память, также должны быть в этом формате. debug также реализует пошаговый режим исполнения, позволяющий выполнять инструкции программы по отдельности одну за другой и наблюдать результат выполнения каждой инструкции в памяти и регистрах. Основные правила использования программы debug: Нет различия между строчными и заглавными буквами. Все вводимые числа воспринимаются в шестнадцатеричной форме. Пробелы используются в командах только для разделения параметров. Сегмент и смещение указываются с использованием символа двоеточия, т.е. в форме сегмент:смещение. Для подтверждения этих правил введем одну и ту же команду тремя разными способами и убедимся, что результат одинаковый (рисунок 1.2). Рисунок 1.2 – Использование команды D (Display) в программе debug Данные примеры используют команду D для просмотра одного и того же участка памяти, начинающегося со смещения ЗС1Н в сегменте кода (CS). Просмотр областей памяти. Упражнение 1. Просмотр области данных BIOS: Данное упражнение показывает содержимое области данных BIOS в памяти, начиная с адреса 400H. Данные в этой области памяти инициализируются BIOS при включении компьютера и изменяются в ходе выполнения программ. Проверим содержимое первых 16 байт области памяти BIOS, которые содержат адреса параллельных и последовательных портов. Для этого воспользуемся командой D 40:00 (рисунок 2.1). Рисунок 2.1 – Проверка параллельных и последовательных портов При помощи команды D 40:10 проверим базовую информацию о присутствующих в системе устройствах (рисунок 2.2). Рисунок 2.2 – Проверка оборудования системы Так же при помощи команды D можно проверить состояние регистра клавиатуры (клавиша Shift). Для начала выключим Num Lock и Caps Lock (на моем ноутбуки отсутствует Num Pad, следовательно, клавиши Num Lock также нет). Используя команду D 40:17 проверим состояние регистра клавиатуры в области данных BIOS (рисунок 2.3). Рисунок 2.3 – Проверка состояния клавиатуры с отключенным Caps Lock Теперь включим Caps Lock и снова проверим содержимое байта по данному адресу (рисунок 2.4). Как можно заметить – значение данного байта изменилось. Рисунок 2.4 – Проверка состояния клавиатуры со включенным Caps Lock При помощи команды D 40:49 можно проверить состояние видеоустройства в области данных BIOS. Первый показанный байт указывает на текущий видеорежим, а второй на число столбцов на экране (рисунок 2.5). Рисунок 2.5 – Проверка состояния видеоустройства Упражнение 2. Просмотр ROM BIOS: При помощи команды –D FE00:0 можно узнать авторское право и серийный номер системы (рисунок 2.6). Рисунок 2.6 – Проверка авторского права и серийного номера системы Также можно узнать дату производства BIOS, которая будет записана в формате мм/дд/гг. Для ее просмотра воспользуемся командой D FFFF:5 (рисунок 2.7). Рисунок 2.7 – Проверка даты производства BIOS Для выхода из программы debug введем Q (рисунок 2.8). Рисунок 2.8 – Выход из программы debug Использование непосредственных данных. Напишем программу, которая использует непосредственные данные – данные, определенный в теле инструкций. Для ввода машинного кода используется команда E. Далее указывается начальный адрес области, в которой будет храниться введенный код. Данная команда сохранит следующие за ней байты в адресах, начиная с указанного начального адреса (рисунок 3.1). Рисунок 3.1 – Ввод инструкций программы на машинном языке Для выполнения написанных инструкций используются команды R и T. Для просмотра начального состояния регистров и флагов введем команду R. Для выполнения всех последующих инструкций используется команда T. При помощи инструкции JMP можно отследить конец выполнения программы. Данная инструкция устанавливает IP в 100H, и обработка возвращается обратно к началу программы (рисунок 3.2). Рисунок 3.2 – Выполнение инструкций программы на машинном языке Для просмотра программы на машинном языке в сегменте кода воспользуемся командой D CS:100 (рисунок 3.3). Рисунок 3.3 – Просмотр содержимого памяти после выполнения программы Использование раннее определенных данных. Теперь напишем программу, которая использует ранее определенные данные – данные, определенные в виде отдельных элементов данных в программе. Инструкции программы должны работать с ячейками памяти, содержащими эти значения. Как и в предыдущем примере воспользуемся командой E для ввода инструкций и данных программы (рисунок 4.1) Рисунок 4.1 – Ввод инструкций и данных программы Для просмотра кода программы воспользуемся командой D CS:100,10A, а для просмотра данных воспользуемся командой D DS:200,208 (рисунок 4.2). Рисунок 4.2 – Просмотр кода программы и данных Далее при помощи команд R и T выполним инструкции программы и при помощи команды D DS:0200,0208 просмотрим данные (рисунок 4.3). Рисунок 4.3 – Выполнение инструкций программы и просмотр данных Для повторного выполнения инструкций можно вручную установить значение IP в регистре при помощи команды R IP, которая вернет нас к началу программы и позволит повторно выполнить уже пройденные шаги (рисунок 4.4). Рисунок 4.4 – Использование команды R IP Рассмотрим работу команды H. Данная команда складывает и вычитает два числа в шестнадцатеричной системе счисления (рисунок 4.5). Рисунок 4.5 – Использование команды H Программа на языке Ассемблера. Рассмотрим работу команды A. Данная команда приказывает debug начать воспринимать ввод символьных инструкций и преобразовывать их в машинный код. Для начала необходимо инициализировать начальный адрес для инструкций в сегменте кода при помощи команды A 100, затем ввести необходимые инструкции и в конце нажать enter для выхода из команды (рисунок 5.1). Рисунок 5.1 – Использование команды A При помощи команды U можно посмотреть машинный код, соответствующий введенным нами символьным инструкциям (рисунок 5.2). Рисунок 5.2 – Использование команды U Далее при помощи команд R и T отследим выполнение машинного кода введенной программы (рисунок 5.3). Рисунок 5.3 – Выполнение машинного кода введенной программы Использование инструкций INT. Инструкция INT осуществляет выход из программы, вызов подпрограммы DOS и BIOS, выполнение заданной функции и возвращение в исходную программу. Пример 1. Получение текущих значений даты и времени. При помощи команды A введем необходимые инструкции, а при помощи команд R, T и P просмотрим выполнение программы и подпрограмм. Инструкция INT 21 с кодом функции 2AH возвращает текущую дату (рисунок 6.1), инструкция INT 21 с кодом функции 2CH возвращает текущее время (рисунок 6.2). Рисунок 6.1 – Получение текущего значения даты Рисунок 6.2 – Получение текущего значения времени Пример 2. Определение установленного оборудования. Инструкция INT 11 передает управление подпрограмме BIOS, помещающей данные от установленном оборудовании в AX (рисунок 6.3-6.4). Рисунок 6.3 – Определение установленного оборудование Рисунок 6.4 – Определение установленного оборудования Пример 3. Использование INT для вывода на дисплей (рисунок 6.5). Рисунок 6.5 – Использование INT для вывода на дисплей Пример 4. Использование INT для ввода с клавиатуры. После ввода команды P программа будет ожидать нажатие клавиши. После нажатия на какую-либо клавишу в AL будет помещено шестнадцатеричное число, соответствующее ASCII-коду нажатого символа (рисунок 6.6). Рисунок 6.6 – Использование INT для ввода с клавиатуры Использование оператора PTR. Рассмотрим пример программы, которая перемещает и складывает данные в регистрах и ячейках (рисунок 7.1). Рисунок 7.1 – Использование оператора PTR После выполнения программы введем команду D DS:0100,0123 для просмотра содержимого области памяти программы (рисунок 7.2). Рисунок 7.2 – Просмотр содержимого области памяти программы Вывод: В ходе выполнения работы я был ознакомлен с вводом программ в память и отслеживанием (трассировкой) их выполнения. Для этого была изучена работа в программе debug и ее основные команды. Благодаря чему также научился просматривать области данных BIOS и ROM BIOS. Также были изучены основные команды для использования непосредственных и ранее определенных данных при помощи машинного языка. Были освоены умения ввода инструкций машинного кода, их выполнение и просмотр содержимого области памяти после выполнения инструкций программы. Также была выполнена работа с написанием программ на языке Ассемблера и просмотром машинного кода, соответствующего введенным символьным инструкциям. Также было изучено использование инструкций INT и оператора PTR. |