
Beschreibt den Aufbau von Segment-Descriptoren. Mehr ...
#include <machine/gdt.h>
Öffentliche Methoden | |
constexpr | SegmentDescriptor (uint64_t val=0) |
Konstruktor für einen konkret gegebenen Eintrag. | |
constexpr | SegmentDescriptor (uintptr_t base, uint32_t limit, bool code, int ring, Mode mode) |
Konstruktor für einen 16/32 Bit Code/Memory Eintrag. Mehr ... | |
Öffentliche Attribute | |
struct { | |
uint64_t limit_low: 16 | |
Niederwertige 16 Bits der Segmentgröße – Wird beeinflusst von granularity! | |
uint64_t base_low: 24 | |
Niederwertige 24 Bits der Basisaddresse. | |
uint64_t type: 3 | |
enum Type segment_type: 2 | |
Segmenttyp (beeinflusst die Bedeutung der beiden vorherigen Bits) | |
uint64_t privilege_level: 2 | |
Ring des Segments. | |
bool present: 1 | |
Valider (vorhandener) Eintrag. | |
uint64_t limit_high: 4 | |
Höherwertige 4 Bits der Segmentgröße. | |
bool available: 1 | |
Bit zur freien Verwendung. | |
uint64_t custom: 2 | |
Granularity granularity: 1 | |
Setzt die Einheit, mit der der angegebene Wert für das Segmentlimit interpretiert werden soll. | |
uint64_t base_high: 8 | |
Höherwertige 8 Bits der Basisaddresse. | |
}; | |
struct { | |
uint64_t __pad0__: 40 | |
bool code_accessed:1 | |
Wenn gesetzt, dann wurde das Codesegment seit dem letzten löschen des Bits mindestens einmal betreten. | |
bool readable: 1 | |
Wenn gesetzt ist der Code lesbar (sonst nur ausführbar) | |
bool conforming: 1 | |
Wenn gesetzt, wird die Ausführung eines Codes im höher priveligierten Segment unter Beibehaltung des Rings erlaubt. Ansonst gibt es eine General-Protection-Ausnahme. | |
uint64_t __pad1__: 10 | |
bool is64bit: 1 | |
64bit Code segement Mehr ... | |
Size operation_size: 1 | |
Standardbreite für Adressen. | |
uint64_t __pad2__: 0 | |
}; | |
Code Segment spezifische Felder. Mehr ... | |
struct { | |
uint64_t __pad0__: 40 | |
bool data_accessed: 1 | |
Wenn gesetzt, dann wurde das Datensegment seit dem letzten löschen des Bits mindestens einmal betreten. | |
bool writeable: 1 | |
Wenn gesetzt sind die Daten schreibbar (sonst nur lesbar) | |
bool expand_down: 1 | |
Richtung: nach unten wachsend Relevant für dynamisch änderbare, wachsende Segmente. | |
uint64_t __pad1__: 10 | |
uint64_t reserved: 1 | |
Reserviert – soll gelöscht sein! | |
Size big: 1 | |
Größe des Stackpointer. Mehr ... | |
uint64_t __pad2__: 0 | |
}; | |
Daten Segment spezifische Felder. Mehr ... | |
struct { | |
uint64_t __pad0__: 40 | |
}; | |
spezifische Felder für Systemsegment (Task State Segment) Mehr ... | |
uint64_t | value |
zusammengesetzter Wert | |
Beschreibt den Aufbau von Segment-Descriptoren.
Eine Datenstruktur, welche die Größe, die Position, die Zugriffsberechtigungen und Verwendung eines Segmentes enthält und in freier Wildbahn in der GDT oder auch in einer LDT aufzufinden ist.
|
inline |
Konstruktor für einen 16/32 Bit Code/Memory Eintrag.
base | Basisaddresse |
limit | Größe |
code | Code oder Datensegment |
ring | Privilegienlevel |
mode | Betriebsmodus (Real/Protected/Long) |
struct { ... } |
Code Segment spezifische Felder.
struct { ... } |
Daten Segment spezifische Felder.
struct { ... } |
spezifische Felder für Systemsegment (Task State Segment)
Size GDT::SegmentDescriptor::big |
Größe des Stackpointer.
bool GDT::SegmentDescriptor::is64bit |
64bit Code segement