Ogólny błąd ochrony

błąd komputerowy występujący w architekturze Intel x86

Ogólny błąd ochrony (ang. general protection fault) – błąd pojawiający się w systemie architektury Intel x86, gdy bieżąco wykonywany program komputerowy w jakiś sposób narusza zasady korzystania ze sprzętu, na którym jest wykonywany. Te zasady mają za zadanie chronić dane i inne programy przed oczywistymi i potencjalnie katastrofalnymi błędami wykonywania procesów. Błędy, które powodują wystąpienie ogólnego błędu ochrony, są zazwyczaj nieodwracalne i uważa się, że najbezpieczniejszą reakcją na nie jest przerwanie działania programu i usunięcie jego procesu (procesów) z systemu operacyjnego.

Przyczyny błędów edytuj

Wyróżnia się na ogół cztery typy zdarzeń, które powodują powstanie tego błędu.

W systemie Windows każde z nich powoduje zgłoszenie stosownego komunikatu, różniącego się jednak treścią w zależności od wersji systemu. W systemach takich jak Unix lub Linux, błędy te są zgłaszane osobno (np. segmentation fault w przypadku błędów pamięci).

Wersja systemu Windows Treść komunikatu Uwagi
Windows 3.0 Unrecoverable Application Error[1]
Windows 3.1x [Nazwa programu] spowodował błąd ogólnego zabezpieczenia w module [nazwa modułu] przy [adres pamięci].
Windows 95
Windows 98
Windows NT 4.0
Program wykonał nieprawidłową operację i nastąpi jego zamknięcie.
Jeżeli problem będzie się powtarzał, skontaktuj się ze sprzedawcą.
Po kliknięciu na przycisk Szczegóły>> użytkownik może dowiedzieć się o źródle błędu.
Windows 2000 [Nazwa programu] wygenerował błędy i będzie zamknięty przez system Windows.
Windows Me [Nazwa programu] spowodował wystąpienie błędu w [nazwa modułu]. Nastąpi zamknięcie programu.
Jeżeli problemy będą nadal występować, spróbuj ponownie uruchomić komputer.
Windows XP
Windows Server 2003
Windows Server 2003 R2
Wystąpił problem z aplikacją [nazwa programu] i zostanie ona zamknięta. Przepraszamy za kłopoty.


Jeżeli jesteś w trakcie pracy, informacje, nad którymi pracujesz, mogły zostać utracone.
[...]
Aby zobaczyć, co zawiera ten raport o błędach, kliknij tutaj.

Użytkownik ma możliwość przesłania do Microsoftu raportu na temat błędu aplikacji.
Windows Vista i nowsze, z wyłączeniem Windows 10, Windows Server 2008 i nowszych Program [nazwa programu] przestał działać.

Program przestał działać poprawnie z powodu wystąpienia problemu. System Windows zamknie program i powiadomi Cię, jeśli istnieje dostępne rozwiązanie.

Przy domyślnych ustawieniach system wysyła raport o błędzie do Microsoftu. Użytkownik może skonfigurować system, by ten każdorazowo pytał lub wcale nie wysyłał raportów.
Windows 10 System wysyła raport o błędzie do Microsoftu. Użytkownicy mający licencje komercyjne mogą określić[,] ile danych ma się znaleźć w wysyłanym raporcie.

Błędy pamięci edytuj

Ten przypadek zachodzi, gdy program próbuje wykonać operację na części pamięci komputera, do której nie powinien mieć dostępu. Obejmuje on:

  • Pisanie do pamięci, która jest tylko do odczytu
  • Próbę wykonania rozkazu z pamięci, która nie jest przeznaczona na instrukcje
  • Próbę odczytania danych z pamięci przeznaczonej na instrukcje
  • Inne konflikty pomiędzy przeznaczeniem pamięci a jej użytkowaniem przez program

Błędy braku uprawnień edytuj

W komputerze są obszary, które są zarezerwowane do wyłącznego użytku przez system operacyjny. Jeśli program, który nie jest częścią systemu operacyjnego próbuje użyć któregoś z nich, może spowodować to powstanie błędu ochrony.

Błędne zachowanie edytuj

Specyfikacja architektury Intela zawiera pewne konwencje, do których programy powinny się stosować, przeważnie ze względu na ochronę poprawności danych w programach i pomiędzy nimi. Program, który ich nie przestrzega, może spowodować powstanie ogólnego błędu ochrony.

Błędy formatu edytuj

Ogólny błąd ochrony może się pojawić, jeśli rozkaz załadowany przez procesor jest nieprawidłowy (nie ma go na liście rozkazów procesora) lub zbyt długi.

Techniczny opis przyczyn błędów edytuj

Ogólny błąd ochrony może zostać wywołany z wielu różnych powodów:

  • błędy naruszenia segmentacji poprzez przekroczenie granic segmentu
    • przy użyciu rejestrów CS, DS, ES, FS lub GS,
    • poprzez dostęp do tablic deskryptorów (takich jak globalna tablica deskryptorów – GDT, tablica deskryptorów przerwań – IDT, lub lokalna tablica deskryptorów – LDT),
  • błędy naruszenia segmentacji poprzez złamanie reguł dostępu do segmentu
    • skok do kodu w segmencie oznaczonym jako niewykonywalny (ang. nonexecutable segments)
    • zapis do segmentu kodu lub do segmentów tylko do odczytu
    • odczyt z segmentów przeznaczonych tylko do wykonania (ang. execute-only segments)
  • nieprawidłowa zawartość rejestrów segmentowych
    • segment stosu (ang. stack segment; skr. SS) zawiera selektor segmentu tylko do odczytu, wykonania lub segment pusty (ang. null segment)
    • segment kodu (ang. code segment; skr. CS) zawiera selektor segmentu danych lub segmentu pustego
    • SS, DS, ES, FS, GS zawiera selektor segmentu wskazujący na segment należący do systemu operacyjnego
    • DS, ES, ES, FS, GS zawiera selektor segmentu wskazujący na segment tylko do wykonania
  • dostęp do pamięci przy użyciu DS, ES, FS, lub GS, gdy zawierają one zerowy selektor
  • przełączanie zadań (TSS)
    • przełączanie do zajętego zadania podczas wywołania lub skoku
    • przełączanie do dostępnego zadania podczas IRET
  • inne
    • próba dostępu do obsługi przerwania lub wyjątku w trybie wirtualnym v86, gdy DPL segmentu kodu jest większe od 0.
    • próba zapisu 1 do zarezerwowanych bitów CR4
    • próba wykonania uprzywilejowanej instrukcji na poziomie uprzywilejowania (ang. current privilege level; CPL) różnym od 0
    • zapis zarezerwowanego bitu w MSR
    • dostęp do bramy zawierającej zerowy selektor segmentu
    • wykonanie przerwania programowego, gdy CPL jest większy niż DPL dla bramy wywołania przerwania
    • selektor segmentu w programie wywołania przerwania lub pułapki nie wskazuje na segment kodu
    • próba załadowania do procesora rozkazu dłuższego niż 15 bajtów
    • przekroczenie uprawnień
    • włączenie stronicowania pamięci z równoczesnym wyłączeniem ochrony pamięci

Na podstawie: Intel Architecture Software Developer’s Manual Volume 3: System Programming

Zobacz też edytuj

Przypisy edytuj

  1. Microsoft, Q75490: Troubleshooting “Unrecoverable Application Error” in DrWatson [online], Microsoft Support [zarchiwizowane z adresu] (ang.).