Читайте также: |
|
При запуске каждого процесса существует обработчик, который сообщает о необработанных исключениях. В Windows 2000 он включается по умолчанию. Пример сообщения представлен на слайде. Если ОС не может обработать исключение в приложении, то процесс не завершается, выдается сообщение с вопросом, что делать, и при нажатии ОК процесс завершается.
Поддержка отчетов об ошибках
Важной компонентой любой программы является диагностика (диагностические сообщения). В ОС Windows тоже предусмотрена компонента, которая называется Windows Error Reporting.
Перехватив необработанное исключение, фильтр или программа исполнительной системы начинает проверять, нужно ли запускать дополнительно для анализа Windows Error Reporting. Если в реестре по умолчанию установлен ноль и нет строки debugger, загружается в аварийный процесс специальная DLL, которая вызывает функцию Report Fail. На слайде 35 представлено окно с отчетом.
Диспетчеризация системных сервисов
Диспетчеризация системных сервисов начинает выполняться после инструкции, за которой закреплен процесс диспетчеризации. Инструкция зависит от типа процессора, на котором работает Windows.
Диспетчеризация 32-разрядных системных сервисов
Для процессоров x86 для начала процессов диспетчеризации использовалась инструкция int 46. В результате выполнения этой инструкции срабатывала ловушка и Windows заносит в таблицу IDT запись под номером 46 – указатель на диспетчер системных сервисов.
Ловушка переключает выполняемый поток в режим ядра и запускает процесс диспетчера системных сервисов. Каждый системный сервис имеет свой номер. Номер запрошенного по int 46 сервиса передается числом в регистре eax. Регистр ebx передает указатель (адрес) на список параметров для выполнения системного сервиса.
На процессорах x86 Pentium II и выше Windows использует другую инструкцию SysEnter (слайд 38). SysEnter – команда процессора, которую Intel ввел специально для быстрой диспетчеризации системных сервисов. Эта инструкция также переводит процесс в режим ядра и запускает диспетчер. Отличия: номер передается в eax, а список параметров – в edx.
Для возврата в пользовательский режим процесс-диспетчер выполняет функцию SysExit. На 32-разрядных процессорах AMD введена машинная команда SysCall, работает по аналогии с SysEnter. Возврат из системног сервиса осуществляется через команду SysRet.
На слайде 37 показано, как заносится номер системного сервиса 183 (B7) и в edx адрес параметров.
Дата добавления: 2015-07-07; просмотров: 130 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Диспетчеризация исключений | | | Глобальные флаги Windows |