Цель работы: исследовать объектные механизмы Win32.
Задание 1.1. Получить список отрытых объектов и изучить типы объектов.
Рисунок 1
Выбран процесс calc.exe с идентификатором (PID) 2652 10.
Рисунок 2
Результаты, предложенные на рисунке 1 и на рисунке 2, одинаковы.
Сводный список с количеством объектов разного типа, принадлежащих выбранному процессу.
Рисунок 3
Сводный список с количеством объектов разного типа для всех процессов вычислительной системы.
Рисунок 4
ALPC Port - порт сервера.
UserApcReserve – обьект, который служит для хранения соответствующих объектов (apc / completion port) в заранее выделенной памяти.
IoComplection - порт завершения ввода-вывода.
Дескрипторы открытых в системе файлов с расширением.xls*.
Рисунок 5
Закроем принудительно дескриптор одного из этих объектов с
помощью команды
Рисунок 6
Проверим дескрипторы открытых в системе файлов с
расширением.xls*
Рисунок 7
Вывод: в результате выполнения пункта 1.1 лабораторной работы были исследованы объектные механизмы Win32.
Задание 1.2. Изучить хранение информации об объектах процесса
Рисунок 7
Информация об открытых дескрипторах объектов. Вывод полной информации о таблице дескрипторов в процессе с идентификатором 0x0a5c (2652 10).
Рисунок 8
Подробная информация о выбранном объекте (0x8) заданного процесса (0x0a5c).
Рисунок 9
С помощью команды!process можно получить информацию о
всех процессах вычислительной системы. Команда!process 0a5c 0
позволяет получить краткую информацию о заданном процессе
(0x0a5c), в том числе получить адрес его таблицы объектов
(ObjectTable).
Рисунок 10
Воспользуемся командой dt _handle_table <адрес_таблицы>.
Рисунок 11
Проанализируем с помощью команды dd <физический_адрес>
|
первые 64 16-разрядных слова, размещенные по адресу одноуровневой
таблицы объектов процесса.
Рисунок 12
По формуле (<младшие 32 бита> | 0x80000000) & 0xfffffff8 определим физические адреса объектов с дескрипторами 4,8,12:
Дескриптор 4 - (0x944319f9 | 0x80000000) & 0xfffffff8 =0x944319f8
Дескриптор 8 - (0x847c6a19| 0x80000000) & 0xfffffff8 =0x847c6a18
Дескриптор 12 - (0x847b8921 | 0x80000000) & 0xfffffff8 =0x847b8920
Получим с помощью команды dt _object_header содержимое
заголовков объектов с дескрипторами 4, 8, 12.
Рисунок 13 (4 дескриптор)
Рисунок 14 (8 дескриптор)
Рисунок 15 (12 дескриптор)
Получим описание самого объекта. Обратимся к полю Body заголовка объекта по смещению 0x18. Для этого используем команду!object
Рисунок 16(4 дескриптор)
Рисунок 17(8 дескриптор)
Рисунок 18(12 дескриптор)
Для получения сведений о типе объекта необходимо
использовать команду dt _object_type, в качестве параметра которой
передается значение поля Type, полученное после использования
команды!object.
Рисунок 19(4 дескриптор)
Рисунок 20(8 дескриптор)
Рисунок 21(12 дескриптор)
Выполним анализ структуры данных, в которой содержатся
атрибуты, общие для всех объектов типа, а также указатели на методы
типа. Для вывода содержимого поля используем команду dt
_object_type_initializer <физический адрес>, не забываем, что поле TypeInfo
имеет смещение 0x28 относительно начала структуры сведений о типе
объекта.
Рисунок 22(4 дескриптор)
Рисунок 23(8 дескриптор)
Рисунок 24(12 дескриптор)
Вывод: в результате выполнения пункта 1.2 лабораторной работы было изучено хранение информации об объектах процесса.
|