Autor Thema: Datensegmentregister  (Gelesen 3252 mal)

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« am: 16. December 2005, 13:47 »
Angenommen man ist im PM, hat einen flachen Addressraum und Paging ist aktiviert. Wenn ich jetzt auf eine Page zugreife, auf die nur der Kernel Zugriffsrechte hat, wird dann CS oder das jeweilige Segmentregister benutzt, um festzustellen, ob ich auf eine Speicherstelle zugreifen darf?
Wenn CS dazu benutzt wird, könnte ich ja eigentlich ES, DS, FS, GS und SS immer auf ein Ring3 Segement zeigen lassen, selbst wenn ich in einem Kernelthread bin, und müsste sie nicht alle auf den Stack pushen, sondern könnte sie einfach wieder auf einen gültigen Wert setzen, oder übersehe ich da irgentwas?

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 16. December 2005, 14:54 »
Ja, das kannst du so machen, weil der Zugriff über CS geprüft wird. Allerdings kannst du dann nicht mehr die optimierten SYSCALL/SYSRET oder SYSENTER/SYSEXIT benutzen, weil diese auf bestimmte zu CS relaitve Werte in DS und SS für die verschiedenen Privileglevel beharren.
Agieren statt Konsumieren!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 16. December 2005, 15:47 »
Zitat von: n3Ro
Ja, das kannst du so machen, weil der Zugriff über CS geprüft wird.


Dr.Dobb sagt was anderes:
From the 80286 to the Pentium, all Intel processors derive their current privilege level (CPL) from the SS access rights.


Intel sagt auch noch etwas anderes:
Zitat von: Intel Manuals Vol. 3 4.5
The CPL is the privilege level of the currently executing program or task. It is stored in bits 0 and 1 of the CS and SS segment registers. Normally, the CPL is equal to the privilege level of the code segment from which instructions are being fetched.


Also nicht ganz einfach. Ich würde deswegen um Problemen vorzubeugen auch SS mit einem Ring 0 Selektor laden.
Dieser Text wird unter jedem Beitrag angezeigt.

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 16. December 2005, 16:44 »
Naja, SS wird ja beim Interrupt eh immer gepushed und dann geändert, zumindest, wenn ein CPL Switch stattfindet. Gut, dann kann ich die Datensegmentregister ja alle auf einen Ring3 Descriptor setzen.

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 17. December 2005, 15:33 »
Zitat von: PorkChicken

Dr.Dobb sagt was anderes:
From the 80286 to the Pentium, all Intel processors derive their current privilege level (CPL) from the SS access rights.



Gut möglich, ich hab in die Manuals vom Intel Pentium II geschaut, und da stand nur CS.
Agieren statt Konsumieren!

 

Einloggen