Создание и управление процессами и потоками
Задание 4. Исследовать в отладчике ход создания процесса.
Указания к выполнению.
1. Исполняемый файл созданного в предыдущем пункте приложения CreateProcess.exe после компиляции проекта должен находиться в следующей папке:
c:\Programs\CreateProcess\Release.
Скопируйте исполняемый файл на виртуальную машину.
2. Проверьте работоспособность исполняемого файла на виртуальной машине. При его запуске должен запускаться "Блокнот".
3. Установите в отладчике точку останова на функции NtCreateProcessEx.
Для этого прервите выполнение виртуальной машины (Ctrl+Break в отладчике). В меню Edit выберите пункт Breakpoints…
В открывшемся окне введите команду:
bp nt!NtCreateProcessEx
Данная команда устанавливает точку останова на функции 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