Ogólny błąd ochrony
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.
|
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]- ↑ Microsoft, Q75490: Troubleshooting “Unrecoverable Application Error” in DrWatson [online], Microsoft Support [zarchiwizowane z adresu] (ang.).