Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: sp am 20. February 2005, 16:33
-
Hallo
nach dem ich nun mit Grub boote, bin ich dabei GDT Verwaltungsfunktionen in C zu schreiben. Nun stehe ich aber vor einem Problem, wie kann ich das Codesegment neu "laden" lassen? Im Moment läuft es so, Grub läd meinen Kernel und ich lade meine GDT. Jetzt würde ja ein Jump ins neue Codesegment folgen, nur das ist in C wohl nicht so gut. Daher meine Frage, kann ich CS auch ohne Jump aktualiseren ?
Danke.
sp
-
Ein Neuladen von CS erfolgt nach vielen Befehlen/Ereignissen z.B.:
-Far Call
-Far Jump
-Int
-iret
Soetwas in der Art muss immer erfolgen, einfach ein Neuladen von CS geht nicht. Aber man kann ganz einfach sowas machen(in NASM):
jmp NEW_CS: $+7
...
In C geht sowas nicht, da musst du auf ASM zurückgreifen.
-
Eventuell Inline-ASM...wenn du nicht extra eine Obj.-Datei dazulinken willst :D