Лаб №1. Исследование объектов
Скачать 2.32 Mb.
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра ВТ отчет по лабораторной работе №1 по дисциплине «Операционные системы» Тема: Исследование объектов Windows
Санкт-Петербург 2019 Цель работы Исследовать объектные механизмы Win32. Основные теоретические положения В данной работе были использованы следующие вспомогательные программы и утилиты: 1)Process Explorer (данная утилита заменяет Диспетчер задач Windows, отображая более подробную информацию о процессах и потоках, включая их родство, загруженные DLL и открытые дескрипторы объектов) 2)Handle (консольная утилита, отображающая информацию о дескрипторах объектов, имеющихся у процессов системы.) 3) LiveKD (позволяет запускать отладчик ядра Microsoft Kd, входящий в Windows Driver Kit (WDK);позволяет выполнять просмотр моментального снимка работающей локальной системы, не перезагружая систему в режим отладки) Задание 1.1 Получим список открытых объектов и изучим типы объектов. Для этого задания воспользуемся утилитами Process Explorer и Handle. Запустим Process Explorer (рис.1). Рисунок 1. Интерфейс утилиты Process Explorer. Выберем следующий объект для дальнейшего изучения: iTunesHelper.exe. Теперь запустим командную строку от имени администратора и запустим утилиту с параметрами: handle –a –p 6136, где 6136 – это PID процесса iTunesHelper.exe. В итоге получим список объектов, принадлежащих данному процессу (рис.2.1 – 2.4). Рисунок 2.1 Список объектов, принадлежащих процессу iTunesHelper.exe Рисунок 2.2 Список объектов, принадлежащих процессу iTunesHelper.exe Рисунок 2.3 Список объектов, принадлежащих процессу iTunesHelper.exe Рисунок 2.4 Список объектов, принадлежащих процессу iTunesHelper.exe Так как данных объектов достаточно много, то сравним только небольшую их часть. В итоге сравнения можно сделать вывод, что утилиты Process Explorer и Handle дают одинаковый результат. Запустим утилиту Handle со следующими параметрами handle –s –p 6136, где 6136 – это PID процесса iTunesHelper.exe. В итоге был получен список с объектами разного типа, принадлежащих данному процессу (рис.3). Рисунок 3. Список с объектами разного типа ALPC Port (Advanced Local Procedure Call) - объект ядра, реализующий механизм межпроцессного взаимодействия. Desktop - объект, содержащийся внутри объекта станции окна (windows station). Рабочий стол имеет логическую поверхность дисплея и содержит окна, меню и связи. Directory - виртуальный каталог в пространстве имён диспетчера объектов, отвечающий за содержание других объектов или каталогов объектов EtwRegistration - объект регистрации, связанный с ETW-провайдером пользовательского режима (или режима ядра), который зарегистрирован с помощью API-функции EventRegister. Event - объект, имеющий постоянное состояние (о котором поступил или не поступил сигнал), который может использоваться для синхронизации или уведомления. File - экземпляр открытого файла или устройства вводавывода. IoCompletion - метод для потоков по постановке в очередь и извлечении из неё уведомлений о завершении операций ввода-вывода. Key (раздел реестра) - механизм ссылки на данные реестра. С объектом раздела (key) связано от нуля до нескольких значений раздела, эти значения содержат данные о разделе. Mutant - механизм обеспечения взаимного исключения для сред Win32 и OS/2. Section (раздел) - область разделяемой памяти. Semaphore - счётчик, ограничивающий доступ к ресурсу путём разрешения доступа к этому ресурсу, защищённому семафором, вполне определённому максимальному количеству потоков. Thread - исполняемая категория внутри процесса. Timer - механизм уведомления потока об истечении конкретного периода времени. TpWorkerFactory - коллекция потоков, назначенных для выполнения конкретного набора задач. Ядро может управлять количеством рабочих элементов, которые будут выполняться по очереди, тем, сколько именно потоков будут отвечать за работу, а также динамическим созданием и завершением рабочих потоков, исходя из конкретных ограничений, устанавливаемых вызывающей программой. Windows показывает рабочий производственный объект через пулы потоков. WindowStation - объект, содержащий буфер обмена, набор глобальных атомов и группу объектов типа Рабочий стол. Теперь запустим Handle со следующими параметрами: handle –s. В итоге получим сводный список с количеством объектов разного типа для всех процессов вычислительной системы (рис.4). Рисунок 4. Сводный список с количеством объектов разного типа Закроем с помощью Handle дескриптор объекта, не завершая сам процесс, на примере файла test.xlsx, открытый в приложении Excel. Сначала проверим дескрипторы открытого файла с помощью команды handle –a .xls. В итоге получим список из двух объектов типа File (рис. 5). Рисунок 5. Открытые файлы xls в системе Закроем дескриптор второго файла командной handle -c EB0 -p 12912 -y (рис. 6) и проверим снова открытые дескрипторы (рис. 7). Рисунок 6. Закрытие дескриптора Рисунок 7. Проверка открытых дескрипторов Задание 1.2 Изучим хранение информации об объектах процесса. Скачаем LiveKD и запустим через командную строку (рис.8). Рисунок 8. Запуск LiveKD С помощью команды !handle получим информацию об открытых дескрипторах объектов (рис.9). Команда имеет следующую форму: !handle <индекс_дескриптора> <флаги> <идентификатор_процесса>. В данном случае идентификатор процесса: 0x17F8 (613610) (рис.9). Рисунок 9. Информация об открытых дескрипторах объектов. Выберем объект для рассмотрения с индентификатором 0x0014, и с помощью команды !handle 14 3 17F8 получим подробную информацию о нём (рис.10). Рисунок 10. Информация о выбранном объекте С помощью команды !process 17F8 0 получим краткую информацию о заданном процессе (0x17F8), в том числе получим адрес его таблицы объектов (ObjectTable) (рис.11). Рисунок 11. Краткая информация о процессе Чтобы проанализировать поля таблицы объектов процесса, воспользуемся командой dt _handle_table <адрес_таблицы>, где <адрес_таблицы> - ffffd980eb4f83c0 (рис.12). Рисунок 12. Анализ полей таблицы объектов Проанализируем с помощью команды dd <физический_адрес> первые 64 16-разрядных слова, размещенные по адресу одноуровневой таблицы объектов процесса, где <физический_адрес> - 0xffffd980'e9c6a000 (рис.13). Рисунок 13. Одноуровневая таблица объектов процесса Таблица 1. Физические адреса дескрипторов
Получим с помощью команды dt _object_header содержимое заголовков объектов с дескрипторами 4, 8, 12 (рис.14.1-14.3). Рисунок 14.1. Содержимое заголовка объекта с дескриптором 4 Рисунок 14.2. Содержимое заголовка объекта с дескриптором 8 Рисунок 14.3. Содержимое заголовка объекта с дескриптором 8 Получим с помощью команды !object описание объектов и описание типов объектов с дескрипторами 4, 8, 12 (рис.15.1 – 15.3). Рисунок 15.1. Описание объекта и типа объекта с дескриптором 4 Рисунок 15.2. Описание объекта и типа объекта с дескриптором 8 Рисунок 15.3. Описание объекта и типа объекта с дескриптором 12 Выполним анализ структуры данных, в которой содержатся атрибуты, общие для всех объектов типа, а также указатели на методы типа. Для вывода содержимого поля используем команду dt _object_type_initializer <физический адрес> (рис.16.1-16.3). Рисунок 16.1. Содержимое поля с дескриптором 4 Рисунок 16.2. Содержимое поля с дескриптором 4 Рисунок 16.3. Содержимое поля с дескриптором 4 Вывод В ходе выполнения данной работы были исследованы объектные механизмы Win32, с помощью утилит Process Explorer, Handle и LiveKD был исследован процесс iTunesHelper.exe, также был получен список объектов этого процесса и проанализированы дескрипторы 4, 8, 12 выбранного процесса. |