Вятский государственный гуманитарный университет
Опубликован: 27.05.2013 | Доступ: свободный | Студентов: 2742 / 614 | Длительность: 09:18:00
Самостоятельная работа 2:

Создание и управление процессами и потоками

< Лекция 6 || Самостоятельная работа 2: 1234 || Лекция 7 >
Аннотация: Цель работы: исследовать структуры данных и функции WRK, используемые при создании и управлении процессами и потоками.

Задание 1. Исследовать структуру данных EPROCESS.

Указания к выполнению.

1. Откройте файл WRK, содержащий описание структуры EPROCESS: base\ntos\inc\ps.h, строка 238.

Замечание. Открыть описание структуры EPROCESS можно в проекте Visual Studio или в HTML документации по WRK (см. лекцию 5 "Исследовательское ядро Windows"):


Замечание. Обратите внимание, в WRK часто названия типов (раздел Types в HTML документации) начинаются с подчеркивания (_EPROCESS), при этом для типа имеется синоним (раздел Typedefs) без подчеркивания (EPROCESS). Использовать можно одинаково как типы, так и их синонимы.

2. Откройте отладчик WinDbg. Запустите процесс отладки ядра.

3. Запустите виртуальную машину Windows Server 2003 SP1 в режиме отладки.

4. Остановите выполнение виртуальной машины в отладчике, нажав Ctrl+Break или выбрав пункт меню DebugBreak или щелкнув кнопку Break на панели инструментов.

Внизу окна Command отладчика (View – Command) должно появиться приглашение для ввода команд kd>:


5. Введите команду: dt eprocess.

dt (display type) – команда отображения информации о типах данных и переменных.

При этом в окне команд должна отобразиться информация обо всех полях типа EPROCESS:


Слева в окне вывода указывается шестнадцатеричное смещение в байтах для поля относительно начала расположения структуры в памяти. Например, поле Pcb – первое поле (смещение 0x000 байт), представляющее собой структуру _KRPOCESS и занимающее в памяти 0x078 = 120 байт.

Замечание. Обратите внимание, что в качестве параметра команды dt мы указываем EPROCESSсиноним типа _EPROCESS. Ввод команды dt _eprocess приведет к аналогичному результату.

6. Чтобы отобразить значения полей структуры EPROCESS для какого-либо конкретного процесса, мы должны узнать адрес этой структуры в памяти. Для этого в отладчике в поле команд введите: !process 0 0.

Команда !process отображает информацию обо всех или нескольких процессах. Первый ноль в параметрах команды означает, что нужно выводить информацию о всех процессах. Если на месте первого параметра указать ID процесса или адрес в памяти его структуры EPROCESS, будет выводиться информация только о данном процессе.

Второй ноль в параметрах команды !process определяет количество информации о процессе: 0 – минимум информации, 7 – максимум информации.

На экране отобразится краткая информация о всех процессах в системе, в том числе их идентификаторы (на рисунке обведено красным) и адреса структур EPROCESS (обведено синим):


Из рисунка видно, что в данном случае ID процесса explorer.exe равен 7EC (в шестнадцатеричном виде) или 2028 (в десятичном виде), а адрес структуры EPROCESS = 81F24BD0. Имейте в виду, что при следующем запуске системы эти значения скорее всего изменятся.

Сейчас можно отображать значения полей структуры EPROCESS для процесса explorer.exe, воспользовавшись адресом структуры:

dt eprocess 81F24BD0.

Обратите внимание на идентификатор процесса – поле UniqueProcessId (его значение должно совпадать с полученным ранее идентификатором), и на файл образа процесса – поле ImageFileName (explorer.exe).

При выводе информации с помощью команды dt не отображаются значения полей внутри вложенных структур, например, поле Pcb (структура KPROCESS). Чтобы отобразить их следует использовать ключ рекурсии –rN, где N – число уровней рекурсии.

Например, команда dt eprocess 81F24BD0 -r1 позволяет получить следующий вывод (приведен не полностью):


< Лекция 6 || Самостоятельная работа 2: 1234 || Лекция 7 >
Кристина Шабалина
Кристина Шабалина
Россия
Никита Усатов
Никита Усатов
Казахстан, Алматы