StuBS
Memory Management

Namespaces

namespace  GDT
 Abstracts the GDT that, primarily, contains descriptors to memory segments.

Classes

union  GDT::SegmentDescriptor
 Describes the structure of segment descriptors. More...
struct  GDT::Pointer
 Structure that describes a GDT Pointer (aka GDT Descriptor). More...
struct  GDT::SegmentDescriptor.__unnamed0__
struct  GDT::SegmentDescriptor.__unnamed1__
 Fields specific for Code Segment (for debugging purposes). More...
struct  GDT::SegmentDescriptor.__unnamed2__
 Fields specific for Data Segment (for debugging purposes). More...

Detailed Description


Class Documentation

◆ GDT::SegmentDescriptor.__unnamed0__

struct GDT::SegmentDescriptor.__unnamed0__
Class Members
uint64_t limit_low: 16 Least-significant bits of segment size (influenced by granularity!).
uint64_t base_low: 24 Least-significant bits of base address.
uint64_t type: 4 Meaning of those 4 bits depends on descriptor_type below.
DescriptorType descriptor_type: 1 Descriptor type (influences the meaning of the 3 bits above).
uint64_t privilege_level: 2 Ring for this segment.
bool present: 1 Entry is valid iff set to true.
uint64_t limit_high: 4 Most-significant bits of segment size.
bool available: 1 Bit which can be used for other purposes (in software).
uint64_t custom: 2 Meaning of those 2 bits relate to descriptor_type and type.
Granularity granularity: 1 Unit used as granularity for the segment limit.
uint64_t base_high: 8 most-significant bits of base address

◆ GDT::SegmentDescriptor.__unnamed1__

struct GDT::SegmentDescriptor.__unnamed1__

Fields specific for Code Segment (for debugging purposes).

See also
ISDMv3, 3.4.5.1; Code- and Data-Segment Descriptor Types
Class Members
uint64_t __pad0__: 40 Ignored (set via limit_low and base_low ).
bool code_accessed: 1 If set, the code segment was used since the last reset of this value.
bool readable: 1 If set, the code is readable (otherwise only executable).
bool conforming: 1 If set, the execution of code from this segment is only allowed when running at a privilege of numerically less than or equal to privilege_level (i.e. the executor has the same or higher privileges). However, the executor's privileges remain unchanged. For nonconforming code segments (i.e., conforming is set to 0), execution is allowed only if the privileges are equal. Execution will cause a GPF in case of privilege violation.
bool code: 1 Has to be set to true.
uint64_t __pad1__: 9 Ignored (set via privilege_level ... available).
Size operation_size: 2 Default address width (custom field bit).
uint64_t __pad2__: 0 Remainder ignored (set via base_high).

◆ GDT::SegmentDescriptor.__unnamed2__

struct GDT::SegmentDescriptor.__unnamed2__

Fields specific for Data Segment (for debugging purposes).

See also
ISDMv3, 3.4.5.1; Code- and Data-Segment Descriptor Types
Class Members
uint64_t __pad0__: 40 Ignored (set via limit_low and base_low).
bool data_accessed: 1 If set, the data segment was used since the last reset of this value.
bool writeable: 1 If set, data is writable (otherwise read only).
bool expand_down: 1 Growing direction for dynamically growing segments.
bool notData: 1 Has to be cleared (false).
uint64_t __pad1__: 9 Ignored (set via privilege_level ... available).
uint64_t reserved: 1 Reserved, always set to 0!
bool big: 1 Size of the stack pointer (false = 16 bit, true = 32 bit).
Warning
Has a different meaning in case expand_down is set to 1.
uint64_t __pad2__: 0 Remainder ignored.