Общая ошибка защиты

редактировать

A Общая ошибка защиты (GPF ) в x86 архитектуры набора команд (ISA) - это ошибка (тип прерывания ), инициированная определенными ISA механизмами защиты в ответ на нарушение доступа, вызванное каким-либо выполняющимся кодом, либо в ядре, либо в пользовательской программе. Механизм впервые описан в руководствах и технических данных Intel для ЦП Intel 80286, который был представлен в 1983 году; он также описан в разделе 9.8.13 справочного руководства программиста Intel 80386 от 1986 года. Общая ошибка защиты реализована как прерывание (вектор номер 13 (0Dh)). Некоторые операционные системы могут также классифицировать некоторые исключения, не связанные с нарушениями доступа, такие как недопустимые исключения opcode, как общие ошибки защиты, даже если они не имеют ничего общего с защитой памяти. Если ЦП обнаруживает нарушение защиты, он прекращает выполнение кода и отправляет прерывание GPF. В большинстве случаев операционная система удаляет отказавший процесс из очереди выполнения, сигнализирует пользователю и продолжает выполнение других процессов. Если, однако, операционная система не может уловить общий сбой защиты, то есть другое нарушение защиты происходит до того, как операционная система вернется из предыдущего прерывания GPF, ЦП сигнализирует двойной сбой, останавливая операционную систему. Если произойдет еще один сбой (тройной сбой ), ЦП не сможет восстановить; начиная с 80286, ЦП переходит в особое состояние остановки, называемое «Завершение работы», из которого можно выйти только с помощью аппаратного сброса. IBM PC AT, первая PC-совместимая система, содержащая 80286, имеет оборудование, которое определяет состояние выключения и автоматически сбрасывает CPU при его возникновении. Все потомки PC AT делают то же самое, поэтому в PC тройная ошибка вызывает немедленный сброс системы.

Содержание

  • 1 Особое поведение
  • 2 Ошибки памяти
  • 3 Ошибки привилегий
  • 4 Технические причины сбоев
    • 4.1 Превышены пределы сегмента
    • 4.2 Разрешения сегмента нарушены
    • 4.3 Сегменты незаконно загружено
    • 4.4 Переключение
    • 4.5 Разное
  • 5 Ссылки
  • 6 Дополнительная литература

Особое поведение

В Microsoft Windows общая ошибка защиты представлена ​​различными язык, в зависимости от версии продукта:

Операционная системаСообщение об ошибкеПримечания
Windows 3.0 Неустранимая ошибка приложения (UAE)
Windows 3.1x [Имя программы] вызвало общую ошибку защиты в модуле [имя модуля] в [адрес памяти].
Windows 95. Windows 98. Windows NT 4.0 Эта программа выполнила недопустимую операцию и будет закрыта.
Windows 2000 [Название программы] вызвала ошибку и будет закрыта Windows.
Windows Me [Имя программы] вызвала ошибку в [Имя модуля]. [Название программы] закроется.
Windows XP. Windows Server 2003. Windows Server 2003 R2 [Название программы] столкнулся с проблемой и должен быть закрыт. Приносим свои извинения за неудобства.

Если вы были в процессе чего-то, информация, над которой вы работали, могла быть потеряна.

[...]

Для получения дополнительных сведений об этой ошибке щелкните здесь.

В сообщении об ошибке также предлагается возможность отправить сведения об ошибке в Microsoft для анализа.
Windows Vista и более поздние версии, за исключением Windows 10. Windows Server 2008 и более поздние версии[Название программы] перестали работать.

Проблема привела к тому, что программа перестала правильно работать. Windows закроет программу и сообщит вам, если решение доступно.

По умолчанию Windows отправляет сведения об ошибках в Microsoft для анализа, но систему можно настроить так, чтобы она либо не отправляла, либо спрашивала пользователя, что делать каждый раз.
Windows 10 Windows отправит сведения об ошибке в Microsoft для анализа. Пользователи с бизнес-лицензией могут настроить объем отправляемой информации.

В Unix и Linux ошибки сообщаются отдельно (например, segmentation fault для ошибок памяти).

Ошибки памяти

При ошибках памяти вызывающая сбой программа обращается к памяти, к которой она не должна обращаться. Примеры включают:

Однако многие современные операционные системы реализуют свои схемы управления доступом к памяти через подкачку вместо сегментация, поэтому часто бывает, что недопустимые ссылки на память в операционных системах, таких как Windows, сообщаются через ошибки страницы вместо общих ошибок защиты. Операционные системы обычно предоставляют уровень абстракции (такой как обработка исключений или сигналы), который скрывает любой внутренний механизм процессора, который использовался для вызова ошибки доступа к памяти из программы, с целью предоставления стандартного интерфейса для обработки множества различных типов генерируемых процессором условия ошибки.

С точки зрения архитектуры x86, общие сбои защиты относятся к защите на основе сегментации, когда дело касается доступа к памяти. Однако общие сбои защиты по-прежнему используются для сообщения о других нарушениях защиты (помимо нарушений доступа к памяти) при использовании подкачки, например, об использовании инструкций, недоступных с текущего уровня привилегий (CPL).

Хотя для операционной системы теоретически возможно использовать как разбиение на страницы, так и сегментацию, по большей части обычные операционные системы обычно полагаются на разбиение на страницы для большей части своих потребностей в управлении доступом к памяти.

Ошибки привилегий

На компьютере есть некоторые вещи, которые зарезервированы для исключительного использования операционной системы. Если программа, не являющаяся частью операционной системы, пытается использовать одну из этих функций, это может вызвать общий сбой защиты.

Кроме того, есть места хранения, которые зарезервированы как для операционной системы, так и для самого процессора. Вследствие их резервирования они доступны только для чтения, и попытка записать в них данные непривилегированной программой является ошибкой.

Технические причины сбоев

Сбои общей защиты вызываются процессором при обнаружении защищенной инструкции, превышающей уровень разрешений текущей выполняемой задачи, либо из-за попытки программы пользовательского режима защищенная инструкция, или потому что операционная система выдала запрос, который переводит процессор в неопределенное состояние.

Общие сбои защиты обнаруживаются и обрабатываются современными операционными системами. Обычно, если неисправность возникла в программе пользовательского режима, программа пользовательского режима завершается. Однако, если неисправность возникла в основном драйвере системы или в самой операционной системе, операционная система обычно сохраняет диагностическую информацию либо в файл, либо на экран и прекращает работу. Он либо перезагружает компьютер, либо отображает экран ошибки, например синий экран смерти или паника ядра.

превышены пределы сегмента

ограничения сегмента может быть превышено:

Нарушены разрешения для сегментов

Разрешения для сегментов могут быть нарушены:

  • переходом к неисполняемым сегментам
  • записью в сегменты кода или сегментами только для чтения
  • чтение сегментов только для выполнения

незаконно загруженных сегментов

Это может произойти, когда:

  • сегмент стека (SS) загружен с помощью селектора сегмента для исполняемого нулевого сегмента только для чтения, или сегмент с привилегией дескриптора, не соответствующей текущей привилегии в CS
  • , сегмент кода (CS), загруженный с помощью селектора сегмента для данных, системы или нулевого сегмента
  • SS, DS, ES, FS или GS - это сегменты, загруженные с помощью селектора сегмента для системного сегмента
  • SS, DS, ES, FS или GS - это сегменты, загруженные с помощью селектора сегмента для сегмента кода только для выполнения
  • доступ к памяти с использованием регистров DS, ES, FS или GS, когда они сохранить нулевой селектор

Переключение

Неисправности могут возникать в структуре сегмента состояния задачи (TSS), когда:

  • переключение на занятую задачу во время вызова или инструкции перехода
  • переключение на доступную задачу во время инструкции возврата из прерывания (IRET)
  • с использованием селектора сегмента на переключателе, указывающем на дескриптор TSS в LDT

Разное

Другие причины из общих ошибок защиты:

  • попытка доступа к обработчику прерывания / исключительной ситуации из виртуального режима 8086, когда дескриптор сегмента кода обработчика уровень привилегий (DPL) больше нуля
  • попытка записать единицу в зарезервированные биты CR4
  • попытка выполнить привилегированные инструкции, когда текущий уровень привилегий (CPL) не равен нулю
  • запись на зарезервированный бит в инструкции MSR
  • , обращающейся к шлюзу, содержащему селектор нулевого сегмента
  • , выполнение программного прерывания, когда CPL больше DPL, установленного для прерывания грамм ate
  • селектор сегмента в шлюзе вызова, прерывания или ловушки не указывает на сегмент кода
  • , нарушающий правила привилегий
  • , включающий пейджинг при отключении защиты
  • обращение к таблице дескрипторов прерываний после прерывания или исключения, которое не является прерыванием, ловушкой или шлюзом задачи
  • Legacy SSE : операнд памяти не выровнен по 16 байтам.

Ссылки

Дополнительная литература

  • Руководство разработчика программного обеспечения Intel Architecture - Том 3: Системное программирование
Последняя правка сделана 2021-05-21 14:46:12
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте