Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Необработанные исключения






При запуске каждого процесса существует обработчик, который сообщает о необработанных исключениях. В 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 адрес параметров.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.