Autor Thema: GDT - nach neuladen der Segmentregister reboot?  (Gelesen 9190 mal)

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« am: 26. April 2014, 19:00 »
Ich bin gerade dabei die GDT einzurichten. Ich arbeite mit GRUB, es ist
also schon eine GDT vorhanden, deshalb lade ich die Segmentregister neu.
Ich arbeite nach diesem(n) Tutorial(s):
speziell für GDT: http://www.lowlevel.eu/wiki/Global_Descriptor_Table
Hauptseite: http://www.lowlevel.eu/wiki/Teil_5_-_Interrupts

Sobald ich Segmentregister neu lade, wird ein reboot ausgeführt. Ich
habe schon eine Vermutung. Und zwar wird im Tutorial angegeben, das
jeder Eintrag in die GDT 8 Byte groß ist. Aber wenn ich den Prototyp der
Funktion, die für die Erstellung eines Eintrags zuständig ist, anschaue,
dann sind darin 2 unsigned und 1 normaler int enthalten. Das wären ja
dann 32bit*3 /8 = 12 Byte oder. Da ich ja in ein bestimmtes Register
Anfang und Endadresse der GDT schreiben muss, denke ich dass hier der
Fehler liegt. Wenn ich aber 12 Byte für die Länge benutze taucht der
selbe Fehler wieder auf. Kann jemand von euch den Fehler finden?

Im Anhang befinden sich meine c und Assemblerdateinen

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. April 2014, 19:21 »
Aber wenn ich den Prototyp der
Funktion, die für die Erstellung eines Eintrags zuständig ist, anschaue,
dann sind darin 2 unsigned und 1 normaler int enthalten.
Die Größe der Parameter ist nicht von Bedeutung. Die werden von der Funktion set_gdt_entry ja verarbeitet und nur bestimmte Bits davon landen auch wirklich in der GDT. Es muss also wirklich .limit = GDT_ENTRIES * 8 - 1 heißen.

Ein Problem, das ich so auf die schnelle im Code gefunden habe, ist, dass du die Segmentregister mit 0x02 lädst. Korrekt wäre 0x10, weil jeder Wert mal 8 genommen wird.
Dieser Text wird unter jedem Beitrag angezeigt.

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 26. April 2014, 19:23 »
ok danke!
Ich hatte schon einmal in den Registern 0x10 drin. Dann habe ich etwas gegoogelt und ein beispiel mit 0x02 gefunden.
Welche Bedeutung hat dieses Register, und wieso muss ich es mit 0x10 laden?

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 26. April 2014, 19:26 »
Noch eine Frage: wieso ist der Datentyp des Pointers void*? Was bedeutet das?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 26. April 2014, 20:33 »
ok danke!
Ich hatte schon einmal in den Registern 0x10 drin. Dann habe ich etwas gegoogelt und ein beispiel mit 0x02 gefunden.
Welche Bedeutung hat dieses Register, und wieso muss ich es mit 0x10 laden?

Die Segmentregister müssen ja wissen, welcher GDT-Eintrag gemeint ist. Also erster, zweiter, dritter und so weiter. Außerdem gibt es im Segmentregister drei Bits, die unter anderem die Privilegstufe angeben. Das sind die drei unteren Bits im Register (also die Bits mit den Werten 1, 2 und 4). Erst die Bits darüber geben den Index an. Die Werte dieser Bits fangen bei 8 an, also im Prinzip wird die Eintragnummer mit 8 multipliziert.

Noch eine Frage: wieso ist der Datentyp des Pointers void*? Was bedeutet das?
Welchen Pointer meinst du?
Dieser Text wird unter jedem Beitrag angezeigt.

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 26. April 2014, 20:38 »
Ok danke Jidder jetzt versteh ich das :)

Den Pointer aus diesem struct:

struct {
    uint16_t limit;
    void* pointer;
} __attribute__((packed)) gdtp = {
    .limit = GDT_ENTRIES * 8 - 1,
    .pointer = gdt,
}

Kannst du auch keinen Fehler finden? :(


Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 26. April 2014, 20:57 »
Der Zeiger ist wohl void, weil der Autor keine Lust hatte da was anderes zu nehmen. Hat keine besondere Bedeutung.

Kannst du auch keinen Fehler finden? :(
Nur durch Draufgucken auf den Code nicht.

Wie testest du den Code denn? Wenn du das mit qemu machst, kannst du mittels des Parameters -d int eine Log-Datei namens qemu.log erstellen lassen. Die landet unter Windows im aktuellen Verzeichnis und unter Linux in /tmp. Daraus kann man meistens mehr Informationen kriegen. Wenn du die Datei irgendwo hochlädst (Pastebin) oder wieder hier anhängst, kann ich mir die mal anschauen.
Dieser Text wird unter jedem Beitrag angezeigt.

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 26. April 2014, 21:01 »
Ja ich nehme qemu.

Ok mach ich!

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 26. April 2014, 21:08 »
Ich habe jetzt in dem Verzeichnis in dem der Kernel liegt folgendes ausgeführt:
qemu -kernel kernel -d int
Es wurde jetzt keine logdatei erstellt, allerdings wurde sie direkt ins Terminal geschrieben:

samuel@samuel-VirtualBox:~/Schreibtisch/OSDev$ qemu -kernel kernel -d int
SMM: enter
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=000f0c50 CCD=00000001 CCO=LOGICB 
EFER=0000000000000000
SMM: after RSM
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000000 CCD=ffffff9c CCO=EFLAGS 
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     0: v=0d e=0010 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0xd new 0xd
     1: v=08 e=0000 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0x8 new 0xd
SMM: enter
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=000f0c50 CCD=00000001 CCO=LOGICB 
EFER=0000000000000000
SMM: after RSM
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000000 CCD=ffffff9c CCO=EFLAGS 
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     2: v=0d e=0010 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0xd new 0xd
     3: v=08 e=0000 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0x8 new 0xd
SMM: enter
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=000f0c50 CCD=00000001 CCO=LOGICB 
EFER=0000000000000000
SMM: after RSM
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000000 CCD=ffffff9c CCO=EFLAGS 
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     4: v=0d e=0010 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0xd new 0xd
     5: v=08 e=0000 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0x8 new 0xd
SMM: enter
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=000f0c50 CCD=00000001 CCO=LOGICB 
EFER=0000000000000000
SMM: after RSM
EAX=00000001 EBX=0000000b ECX=02000000 EDX=00000cfc
ESI=00000000 EDI=02000000 EBP=00000000 ESP=00006d34
EIP=000f10c9 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000f6688 00000037
IDT=     000f66c6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000000 CCD=ffffff9c CCO=EFLAGS 
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     6: v=0d e=0010 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0xd new 0xd
     7: v=08 e=0000 i=0 cpl=0 IP=0008:00100048 pc=00100048 SP=0010:00103fbc env->regs[R_EAX]=00000010
EAX=00000010 EBX=00009500 ECX=0000ffff EDX=0000ffff
ESI=00000000 EDI=00106000 EBP=00103fc8 ESP=00103fbc
EIP=00100048 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104000 00000027
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000020 CCD=00103f94 CCO=ADDL   
EFER=0000000000000000
check_exception old: 0x8 new 0xd

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 26. April 2014, 21:17 »
Aus dem Log kann ich leider auch nichts interessantes erkennen. Eur erläuterung: Wenn du dir das Log mal anschaust, fällt dir sicherlich auf, dass sich die Blöcke darin immer wiederholen. Ein Block beginnt mit ein oder zwei Zeilen, die ein paar Informationen über den Interrupt liefern, und dann mehrere Zeilen Registerdump. Die ersten beiden Interrupts (SMM: enter und SMM: after RSM) treten in qemu immer auf, und haben nichts mit deinem OS zu tun. Der darauf folgende Interrupt ist interessant. Der Dump fängt mit
Zitat
check_exception old: 0xffffffff new 0xd
     0: v=0d e=0010 ...
Das ist der General Protection Fault (v=0d). Das e=0010 ist der Fehlercode und heißt in diesem Fall, dass es ein Problem mit dem Selektor 0x10 gibt. (Siehe auch Intel Manuals Volume 3, Chapter 6 Interrupt and Exception Handling, 6.13 Error Code.) Weiter unten steht
Zitat
GDT=     00104000 00000027
Das ist so zu interpretieren, dass wohl die richtige GDT geladen wurd (Adresse 0x104000) und diese auch groß genug ist (Limit 0x27). Bleibt also als einzige Fehlerursache nur noch der Inhalt der GDT. Also stimmt irgendwas mit set_gdt_entry nicht.

Und deswegen habe ich mir gerade nochmal den Code angeschaut und gesehen, dass du uint64_t als unsigned long definiert hast. Korrekt ist unsigned long long. Hätten wir auch eher rauskriegen können.
Dieser Text wird unter jedem Beitrag angezeigt.

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 26. April 2014, 21:22 »
SEHR GUT!!! Vielen Dank, jetzt funktioniert es!!!  :-D

eine Frage noch: wieso wurde bei mir keine logdatei erstellt?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 26. April 2014, 21:23 »
Vermutlich sind meine Informationen darüber wie qemu sich verhält veraltet. Ich schreib hier auch immer nur dasselbe seit Jahren. Irgendwann geht halt die Zeit weiter ^^ Irgendwo im Handbuch von qemu ist das bestimmt dokumentiert.
Dieser Text wird unter jedem Beitrag angezeigt.

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 26. April 2014, 21:27 »
Ok.
Danke für deine Hilfe!

 

Einloggen