pm: aus ring0 in ring3 springen
-
hi
momentan laufen alle tasks in meinem kleinem system im ring0... das ist natürlich aus sicherheitsgründen net so doll
wie genau komme ich jetzt aus ring0 in ring3? über einen farjump geht es nicht... das weiß ich mitlerweile aber die iret methode funktioniert bei mir irgendwie nicht...
und noch was: wie muss ich dir privilege level setzen?
in den GDT einträgen (code-segment, data-segment und stack-seg) muss der DPL auf ring3 stehen okaber was ist mit dem GDT-eintrag fürs tss etc?
danke schonmal
-
weiß keine was oder bin ich zu ungenau?
-
Hi.
Also ich habe es jetzt nicht ueberprueft, aber wo ist beim Sprung von Ring0 zu Ring3 das Problem? - Deine Beschreibung ist ehrlichgesagt wirklich ein wenig wage...
Hast du zB. auch das rpl des Code-Selectors auf 3 gesetzt...?Vielleicht wuerde ein wenig Code die Fehlersuche auch erleichtern.
Zu Problem nr2:
Der DPL-Wert des TSS-Descriptors ist eigentlich unwichtig, wichtig ist nur der DPL des Task-Gates - der entscheidet darueber, von welchem Privileglevel aus der Taskwechsel ausgefuehrt werden kann.
-
also: wenn man zu einem task wechseln will der die selbe privileg-stufe wie der aktuelle hat dann kann man soweit ich weiß einfach einen far jump auf den tss-deskriptor machen... wenn man allerdings in einen task mit einer anderen privileg-stufe wechseln will funktioniert dies dort mit einem einfachen far-jump nicht (keine ahnung wieso) sondern man muss die sogenannte "iret-methode" verwenden... dabei wird zunächt das NT-Flag gesetzt dann pushed man "irgendwelche" werte auf den stack und macht ein iret... soweit so gut... was ich jetzt gerne wissen möchte:
-was für parameter muss ich auf den stack pushen bevor ich mit iret in den task komme
-wie müssen die dpl/rpl in den deskriptoren/selektoren gesetzt sein
-was muss ich sonst noch so beachtenso in etwa
oder gibt es im netz vielleicht irgendwo n kleines "demo-os" welches multitasking mit unterschiedlichen privileg-stufen durchführt? alles was ich bisher gesehen habe hat alle tasks im ring0 laufen lassen
MFG mblock
-
Wieso wollt ihr eigentlich überhaupt in einen anderen Task springen? Es war doch nur die Rede davon, dass er von Ring 0 in Ring 3 will. Und da hätte ich gedacht, dass das mit einem einfachen far jump geht.
-
es geht aber mit einem einfachen far-jump net... also wie machs ich denn nun?
-
Du erstellst einfach einen Codesegmentdescriptor der die Privilegstufe 3 hast und wechselst mit einem Far-Jump zu diesem hin.
Wenn du im Ring0 Mode bist, dann sollte das eigentlich ohne Ärger gehen.
Umgekehrt benötigst du ein Call-Gate um vom Ring3 in Ring0 zu kommen.
Aber wenn du einfach einen Task haben willst der in Ring3 läuft. Dann erstell einfach ein TSS-Segment mit Deskritor und mache einen Far-Jump dahin.
Dann hast du einen Task gestartet der im Ring3 läuft.