Allgemeine Schutzverletzung


A allgemeine Schutzverletzung (GPF) in dem x86 Anweisungsset Architekturen (Isas) ist a Fehler (Eine Art von unterbrechen) Initiiert von ISA-definierten Schutzmechanismen als Reaktion auf einen Zugangsverstoß, der durch einige laufende Code verursacht wird, entweder in der Kernel oder ein Benutzerprogramm. Der Mechanismus wird zuerst in Intel -Handbüchern und Datenblättern für die beschrieben Intel 80286 CPU, die 1983 eingeführt wurde; Es ist auch in Abschnitt 9.8.13 in der beschrieben Intel 80386 Das Referenzhandbuch des Programmierers aus dem Jahr 1986. Ein allgemeiner Schutzfehler wird als Interrupt implementiert (Vektor Nummer 13 (0dh)). Etwas Betriebssysteme Kann auch einige Ausnahmen klassifizieren, die nicht mit Zugriffsverstößen verbunden sind, wie beispielsweise illegal Opcode Ausnahmen als allgemeine Schutzfehler, obwohl sie nichts mit Gedächtnisschutz zu tun haben. Wenn eine CPU einen Schutzverstoß erfasst, wird der Code nicht mehr ausgeführt und sendet einen GPF -Interrupt. In den meisten Fällen entfernt das Betriebssystem das Ausfall Prozess Signal aus der Ausführungswarteschlange den Benutzer und führt weiterhin andere Prozesse aus. Wenn das Betriebssystem jedoch den allgemeinen Schutzfehler nicht erfasst, d. H. Ein weiterer Schutzverstoß erfolgt, bevor das Betriebssystem aus dem vorherigen GPF -Interrupt zurückkehrt DoppelfehlerStoppen des Betriebssystems. Wenn noch ein Fehler (dreifache Fehler) tritt auf, die CPU kann sich nicht erholen; Seit 80286 tritt die CPU in einen speziellen Stall mit dem Namen "Shutdown" ein, der nur durch a verlassen werden kann Hardware -Reset. Das IBM PC bei, Der Erste PC-kompatibel Das System zum Enthaltenden eines 80286 verfügt über Hardware, die den Stillstandszustand erkennt und die CPU automatisch zurücksetzt, wenn sie auftritt. Alle Nachkommen des PCs tun dasselbe, so dass in einem PC ein dreifacher Fehler ein sofortiges System zurückgesetzt wird.
Spezifisches Verhalten
Im Microsoft Windows, Der allgemeine Schutzfehler präsentiert eine unterschiedliche Sprache, abhängig von der Produktversion:
Betriebssystem | Fehlermeldung | Anmerkungen |
---|---|---|
Windows 3.0 | Nicht wiederherstellbarer Anwendungsfehler Beendigung der aktuellen Anwendung. | [1] |
Windows 3.1x | [Programmname] verursachte einen allgemeinen Schutzfehler im Modul [Modulname] unter [Speicheradresse]. | Diese Fehlermeldung (mit demselben Entwurfsformat) kann auch in späteren Versionen (95 und 98) in seltenen Fällen angezeigt werden. Der Text dieses Fehlers wird auch in 95 und 98 angezeigt, wenn auf die Schaltfläche "Details" geklickt wird. |
Windows 95 Windows 98 Windows NT 4.0 | Dieses Programm hat eine illegale Operation durchgeführt und wird geschlossen. Wenn das Problem weiterhin besteht, wenden Sie sich an den Programmanbieter. | |
Windows 2000 | [Programmname] hat Fehler generiert und wird von Windows geschlossen. | |
Fenster mich | [Programmname] hat einen Fehler in [Modulnamen] verursacht. [Programmname] wird jetzt schließen. Wenn Sie weiterhin Probleme haben, starten Sie den Computer neu. | |
Windows XP Windows Server 2003 Windows Server 2003 R2 | [Programmname] ist auf ein Problem gestoßen und muss schließen. Wir entschuldigen uns für die Unannehmlichkeiten. Wenn Sie mitten in etwas waren, gehen die Informationen, an denen Sie gearbeitet haben, möglicherweise verloren. [...] Weitere Informationen zu diesem Fehler, Klick hier. | Die Fehlermeldung bietet auch die Option, Fehlerdetails an Microsoft zur Analyse zu senden. |
Windows Vista und später ohne Windows 10 Windows Server 2008 und später | [Programmname] hat aufgehört zu arbeiten. Ein Problem führte dazu, dass das Programm nicht mehr richtig funktioniert. Windows schließt das Programm und benachrichtigt Sie, wenn eine Lösung verfügbar ist. | Standardmäßig sendet Windows Fehlerdetails zur Analyse an Microsoft, aber das System kann so konfiguriert werden, dass sie entweder nicht senden oder den Benutzer jedes Mal tun, was er tun soll. |
Windows 10 | Windows sendet Fehlerdetails zur Analyse an Microsoft. Benutzer mit einer Geschäftslizenz können konfigurieren, wie viele Informationen gesendet werden. |
Im Unix und LinuxDie Fehler werden getrennt gemeldet (z. Segmentierungsfehler für Speicherfehler).
Speicherfehler
Bei Speicherfehlern zugreift das Verwerfungsprogramm zugänglich Erinnerung dass es nicht zugreifen sollte. Beispiele beinhalten:
- Versuch, an a zu schreiben schreibgeschützter Teil des Speichers
- Versuch zu führen Bytes im Speicher, der nicht als als als bezeichnet als als Anweisungen
- Versuch, als Datenbytes im Speicher zu lesen, die als Anweisungen bezeichnet werden
- Andere verschiedene Konflikte zwischen der Bezeichnung eines Teils des Gedächtnisses und seiner Verwendung
Viele moderne Betriebssysteme implementieren jedoch ihre Speicherzugriffskontrollschemata über Paging anstelle der Segmentierung. Daher ist dies häufig der Fall, dass ungültige Speicherreferenzen in Betriebssystemen wie Windows über über die Überschrift übernommen werden Seitenfehler anstelle allgemeiner Schutzfehler. Betriebssysteme bieten typischerweise eine Abstraktionsschicht (z. B. Ausnahmeregelung oder Signale), die den internen Prozessormechanismus versteckt, um einen Speicherzugriffsfehler aus einem Programm zu erhöhen, um eine Standardschnittstelle für den Umgang mit vielen verschiedenen Arten von Prozessorgenerierten bereitzustellen Fehlerbedingungen.
In Bezug auf die X86-Architektur sind allgemeine Schutzfehler spezifisch für segmentierungsbasierte Schutz, wenn es um Speicherzugriffe geht. Allgemeine Schutzfehler werden jedoch weiterhin verwendet, um andere Schutzverstöße (abgesehen von Verstößen gegen den Speicherzugriff) bei der Verwendung von Paging zu melden, z. B. die Verwendung von Anweisungen, die nicht aus dem zugänglich sind Aktuelle Privilegienstufe (CPL).
Während es theoretisch möglich ist, dass ein Betriebssystem sowohl Paging als auch Segmentierung nutzt, beruhen gemeinsame Betriebssysteme größtenteils auf Paging für den Großteil ihres Speicherzugriffskontrollanforderungens.
Privilegienfehler
Es gibt einige Dinge auf einem Computer, die für die exklusive Verwendung der reserviert sind Betriebssystem. Wenn ein Programm, das nicht Teil des Betriebssystems ist, versucht, eines dieser Merkmale zu verwenden, kann es zu einem allgemeinen Schutzfehler führen.
Darüber hinaus gibt es Speicherorte, die sowohl für das Betriebssystem als auch für den Prozessor selbst reserviert sind. Infolge ihrer Reservierung sind sie schreibgeschützt und ein Schreibversuch Daten Für sie durch ein nicht privilegiertes Programm erzeugt ein Fehler.
Technische Ursachen für Fehler
Allgemeine Schutzfehler werden vom Prozessor erhoben, wenn ein geschützter Anweisungen auftritt der Prozessor in einen undefinierten Zustand.
Allgemeine Schutzfehler werden von modernen Betriebssystemen gefangen und behandelt. Wenn der Fehler in einem Benutzermodusprogramm stammt, wird das User-Mode-Programm im Allgemeinen beendet. Wenn der Fehler jedoch aus einem Kernsystemtreiber oder dem Betriebssystem selbst stammt, speichert das Betriebssystem normalerweise diagnostische Informationen entweder in einer Datei oder auf dem Bildschirm und stoppt den Betrieb. Es startet entweder den Computer neu oder zeigt eine an Fehlerbildschirm, so wie ein Bluescreen des Todes oder Kernel Panik.
Segmentgrenzen überschritten
Segmentgrenzen können überschritten werden:
- mit Codesegment (CS), Datensegment (DS) oder ES-, FS- oder GS -Register (zusätzliches Segment); oder
- Zugriff auf Deskriptortabellen wie die Globale Deskriptortabelle (GDT), die Interrupt Descriptor Tabelle (Idt) und die Lokale Deskriptortabelle (LDT).
Segmentberechtigungen verletzt
Segmentberechtigungen können verletzt werden durch:
- Springen zu nicht exezibutierbaren Segmenten
- Schreiben in Code -Segmente oder nur Segmente lesen
- Lesen nur ausführende Segmente
Segmente illegal geladen
Dies kann auftreten, wenn:
- Ein Stacksegment (SS) wird mit einem Segment -Selektor für eine einzige LEAD, ausführbare Datei, Nullsegment oder Segment mit Deskriptorberechtigungen geladen, die nicht mit dem aktuellen Berechtigungen in Cs übereinstimmt
- Ein Codesegment (CS), das mit einem Segmentauswahl für ein Daten-, System- oder Nullsegment geladen wurde
- SS, DS, ES, FS oder GS sind Segmente, die mit einem Segmentauswahl für ein Systemsegment beladen sind
- SS, DS, ES, FS oder GS sind Segmente mit einem Segment-Selektor für ein Nur-Codes-Segment ausführend
- Zugriff auf Speicher mit DS-, ES-, FS- oder GS -Registern, wenn sie einen Null -Selektor enthalten
Umschalten
Fehler können in der auftreten Aufgabenstatussegment (TSS) Struktur, wenn:
- Wechsel zu einer geschäftigen Aufgabe während eines Anruf- oder Sprunganweisung
- Wechsel zu einer verfügbaren Aufgabe während eines IRET -Befehls (Interrupt Return)
- Verwenden eines Segmentauswählers auf einem Schalter, der auf einen TSS -Deskriptor im LDT zeigt[Klarstellung erforderlich]
Sonstig
Andere Ursachen für allgemeine Schutzfehler sind:
- Versuch, auf einen Interrupt-/Ausnahmebehandler aus zuzugreifen Virtueller 8086 -Modus Wenn der Codesegmentdeskriptor des Handlers Privilegienniveau (DPL) ist größer als Null
- Versuch, eins in die reservierten Teile von zu schreiben CR4
- Versuch zu führen privilegiert Anweisungen, wenn die aktuelle Privilegienstufe (CPL) nicht Null ist
- Schreiben auf ein reserviertes Stück in einem Msr Anweisung
- Zugriff auf ein Tor, das einen Nullsegment -Segment enthält
- Ausführen einer Software -Interrupt, wenn die CPL größer ist als der DPL -Satz für das Interrupt -Gate
- Der Segment -Selektor in einem Aufruf, Interrupt oder Trap Gate verweist nicht auf ein Codesegment
- Verstoß gegen Privilegien
- Ermöglichen von Paging beim Schutz des Schutzes
- Verweisen Sie auf die Interrupt -Deskriptor -Tabelle nach einem Interrupt oder einer Ausnahme, die kein Interrupt-, Trap- oder Task -Gate ist
- Erbe Sse: Speicheroperand ist nicht 16-Byte ausgerichtet.
Verweise
- ^ "Fehlerbehebung" nicht wiederherstellbarer Anwendungsfehler "in Drwatson". Die Unterstützung. Microsoft. 27. Februar 2014.
Weitere Lektüre
- Intel Architecture Softwareentwicklerhandbuch–Volume 3: Systemprogrammierung