Ogólny błąd ochrony

Z Wikipedii, wolnej encyklopedii
(Przekierowano z General protection fault)

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

Przypisy[edytuj | edytuj kod]

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