Autor Thema: Sprung R0 nach R1  (Gelesen 8603 mal)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« am: 27. May 2005, 13:18 »
hi,

kann es sein, dass sprünge im PM von Ring0 nach Ring1 und so weiter (Ring2, Ring3) nur mit TSS gehen? währe ja sonst sehr unsicher, weil das programm in Ring1 den stack manipulieren könnte vor dem ret. oder wie funktioniert das?

J!N
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #1 am: 27. May 2005, 13:21 »
Wie kann es denn vor dem ret den Stack manipulieren? Da läuft doch noch Ring 0 Code. Und bevor du in den niedrigeren Ring springen willst, wirst du wohl den Stack anpassen wollen (bei iret geht das ja in einem Schritt), abgesehen davon das der Stack vom Ring 0 gar nicht erst erreichbar sein dürfte für den Ring 1 Code.
*post*

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #2 am: 27. May 2005, 13:23 »
Von 0 in 1 ist kein Problem da reicht einfacher Call aus. Nur bei  1 in 0 braucht man Call-Gates, TSS oder anderes^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 27. May 2005, 13:25 »
Also.

Ich bin in Ring 0. Von da aus mach ich einen Call nach Ring 1. Dürfte ohne Call-Gates gehen. Ich bin also jetzt in Ring 1. Dort könnte doch das Programm den Stack ändern (heißt die Rücksprungadressen manipulieren) und dann käme man nichtmehr zurück! Wird das verhindert? Bei TSS gehts ja nicht, weil in dem BackLink das letzte TSS gespeichert wird, das dann aufgerufen wird und was nicht manipulierbar ist.

J!N

ADD: Außerdem hat man da noch nen anderen Stack durch das TSS!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #4 am: 27. May 2005, 13:30 »
Per einfachem Rücksprung kommst du sowieso nicht in Ring 0 zurück.
*post*

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #5 am: 27. May 2005, 13:31 »
Naja wenn der Kernel funktionen aufruft die ihn zerschiessen...selbst Schuld. Das was der Kernel direkt aufruft sollte schon sicher sein. Das was er nicht selbst direkt aufruft, also was Code von ausserhalb ist, sollte schon irgendwie abgesichert sein
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 27. May 2005, 13:43 »
Wenn du zwischen den einzelnen Protection-Rings hin und her springen willst brauchst du nur ein TSS, weil darin die Stack Pointer für die höheren Privileg-Stufen gespeichert sind. Um von einer niederen in eine höher privilegierte Stufe zu kommen braucht man ein Call, Int oder Trap Gate. Andersherum geht es mit einem Einfachen Iret. Und dabei wird das TSS nicht geswitched!
Agieren statt Konsumieren!

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #7 am: 27. May 2005, 21:40 »
Heißt man braucht TSS.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 27. May 2005, 22:37 »
Ja, wird aber nicht so benutzt wie man sich das früher ausgedacht hatte ;-)
Agieren statt Konsumieren!

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #9 am: 30. May 2005, 09:01 »
Wenn man unbedingt TSS braucht, wie soll das dann auf AMD64 gehen? Da gibt es kein Hardwaretasking mehr. Muss also auch anders funktionobeln.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #10 am: 30. May 2005, 10:37 »
Unter AMD64 ist das gut möglich ... unter x86 wohl eher nicht wenn man die Ringe benutzt (und das wird man ja meistens ...)!

Obwohl, SYSCALL/SYSENTER könnten auch eine Möglichkeit bereitstellen, kann ich aber nicht exakt sagen!
*post*

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 31. May 2005, 14:05 »
Unter AMD64 im LongMode gibt es immernoch eine TSS, aber wirklich NUR EINE! Da stehen die Stackpointer für die einzelnen Ringe drin plus noch ein paar extra Stack Pointer, die man, wenn man will, für seine Interrupts verwenden kann.
Agieren statt Konsumieren!

 

Einloggen