Hallo,
nachdem ich die GDT initialisiert habe lade ich die Segmentregister neu und es gibt einen Triple fault und ich verstehe nicht warum.
Hier mein Code
nachdem ich die GDT initialisiert habe lade ich die Segmentregister neu und es gibt einen Triple fault und ich verstehe nicht warum.
Hier mein Code
Code: (C) [Auswählen]
void setGDTEntry(int i, unsigned int base, unsigned int limit, char access, char flags)
{
gdt[i] = limit & 0xFFFF;
gdt[i] |= (base & 0xFFFFFF) << 16;
gdt[i] |= (access & 0xFF) << 40;
gdt[i] |= ((limit >> 16) & 0xF) << 48;
gdt[i] |= (flags & 0xF) << 52;
gdt[i] |= ((base >> 24) & 0xFF) << 56;
}
void GDTInit()
{
setGDTEntry(0, 0, 0, 0, 0); //NULL-Deskriptor
setGDTEntry(1, 0, 0xFFFFF, 0x9A, 0xC); //Codesegment, ausführ- und lesbar, 32-bit
setGDTEntry(2, 0, 0xFFFFF, 0x92, 0xC); //Datensegment, les- und schreibbar
setGDTEntry(3, 0, 0xFFFFF, 0x9A, 0xA); //Codesegment, ausführ- und lesbar, 64-bit
gdtr.limit = GDT_ENTRIES *8 -1;
gdtr.pointer = gdt;
asm("lgdt %0": :"m"(gdtr));
asm(
"mov $0x10,%ax;"
"mov %ax,%ds;" //hier gibt es den Triple-Fault
"mov %ax,%es;"
"mov %ax,%ss;"
"mov %ax,%fs;"
"mov %ax,%gs;"
"ljmp $0x8,$.1;"
".1:"
);
}
Danke vielmals.
Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert