Работа 1. Исследование объектов Windows




Цель работы: исследовать объектные механизмы 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 лабораторной работы было изучено хранение информации об объектах процесса.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: