Лаб №1. Исследование объектов
![]()
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра ВТ отчет по лабораторной работе №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 выбранного процесса. |