Опубликован: 27.05.2013 | Уровень: для всех | Доступ: платный | ВУЗ: Вятский государственный гуманитарный университет
Самостоятельная работа 2:

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

< Лекция 6 || Самостоятельная работа 2: 1234 || Лекция 7 >

Задание 4. Исследовать в отладчике ход создания процесса.

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

1. Исполняемый файл созданного в предыдущем пункте приложения CreateProcess.exe после компиляции проекта должен находиться в следующей папке:

c:\Programs\CreateProcess\Release.

Скопируйте исполняемый файл на виртуальную машину.

2. Проверьте работоспособность исполняемого файла на виртуальной машине. При его запуске должен запускаться "Блокнот".

3. Установите в отладчике точку останова на функции NtCreateProcessEx.

Для этого прервите выполнение виртуальной машины (Ctrl+Break в отладчике). В меню Edit выберите пункт Breakpoints…

В открывшемся окне введите команду:

bp nt!NtCreateProcessEx

и нажмите Enter.


Данная команда устанавливает точку останова на функции NtCreateProcessEx. Указание nt! означает модуль, в котором отладчику следует искать функцию. Если в данном случае не указать модуль nt (ядро), то отладчик автоматически поставит точку останова на функции NtCreateProcessEx, экспортируемой ntdll.dll.

4. Возобновите выполнение виртуальной машины (нажмите F5 в отладчике). Запустите в виртуальной машине приложение CreateProcess.

Сработает точка останова для функции NtCreateProcessEx, которая запускает приложение CreateProcess. Нас интересует запуск "Блокнота", поэтому продолжите выполнение, нажав F5 в отладчике.

Точка останова сработает второй раз – произошел вызов функции NtCreateProcessEx для запуска "Блокнота". Перейдите в отладчик. В нем должно открыться окно с исходным кодом функции NtCreateProcessEx (файл base\ntos\ps\create.c).

Проследите ход создания объекта процесс (см. лекцию 6 "Процессы и потоки", раздел "Создание процесса", шаг 3). Для этого используйте клавиши F11 – выполнение следующей команды с заходом в процедуры (Step Into) и F10 – то же самое, но процедуры выполняются за один шаг (без захода, Step Over).

Значения переменных можно отслеживать в окне Locals (Alt+3), окне Watch (Alt+2, нужно вводить интересующие переменные) или просто наводя курсор мыши на переменную в окне исходного кода.

Задания для самостоятельного выполнения

Задание 1. Исследуйте структуру данных ETHREAD.

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

1. Используйте HTML документацию по WRK или проект Visual Studio.

2. Для просмотра полей структуры ETHREAD используйте команду:

dt ethread.

3. Для получения информации об адресах структур ETHREAD потоков процесса используйте команду:

!process id 4.

4. Для получения информации о потоке используйте команду:

!thread address,

где address – адрес структуры ETHREAD потока.

5. Для просмотра значений полей структуры ETHREAD для конкретного потока используйте команду:

dt ethread address.

Задание 2. Исследовать в отладчике ход создания потока.

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

  • Используйте описание хода создания потока в лекции 6 "Процессы и потоки", раздел "Создание процесса", шаг 4.
  • Используйте проект, созданный в задании 3 основной части лабораторной работы.
  • Установите в отладчике точку останова на функции NtCreateThread:
bp nt! NtCreateThread
< Лекция 6 || Самостоятельная работа 2: 1234 || Лекция 7 >
Фанис Гильманов
Фанис Гильманов
Россия, г. Нижнекамск
chunhu wu
chunhu wu
Аргентина, jhkh jk k