Жизнь после BSOD

перехват голубого экрана командой bpm "KeBugCheckEx X" в soft-ice


Прокручивая окно дизассемблера вниз, находим первую инструкцию "RET 14h" (в нашем случае она располагается по адресу 8042C1E9h). Это и есть команда выхода из функции на которую нужно сделать jmp. Для быстрого поиска можно попросить soft-ice сделать search ("s eip l -1 C2,14,00").

Говорим отладчику "r eip = 8042C1E9" (у вас адрес скорее всего будет другим) и давим на <Ctrl-D> для выхода. Отладчик всплывает повторно, в той же самой функции. У нас ничего не получилось?! Не торопитесь с выводами! Все идет по плану! Игнорирование критических ошибок вызывает целый каскад вторичных исключений, что в данном случае и происходит. Повторяем нашу команду "r eip = 8042C1E9" (для этого достаточно нажать стрелку вверх/<ENTER>) и… система возвращается в нормальный режим! Третий раз отладчик уже не всплывает. Мышь немного тормозит, однако, гонять ее по коврику вполне возможно.

Приступаем к созданию драйвера, который будет все это делать за нас. Для начала нам понадобится скелет. Выглядит он так:

.386                 ; использовать команды .386 ЦП

.model flat, stdcall ; плоская модель памяти, stdcall-вызовы по умолчанию

 .code               ; секция кода

DriverEntry proc     ; точка входа в драйвер

       ; код "драйвера"

       ;

       …

       …

       …

       ; возвращаем ошибку конфигурации

       mov eax, 0C0000182h; STATUS_DEVICE_CONFIGURATION_ERROR

       ret           ; выходим

DriverEntry endp

end DriverEntry



Содержание раздела