far call und ret
-
wenn man im pmode einen far call von einem codesegment zu einem anderen unternimmt, kommt man mit retf nur dann zurück, wenn beide codesegmente den gleichen dpl haben. stimmt das?
-
IMHO => Stimmt so nicht.
-
Wäre in meinen Augen unsinnig, da dann sowas wie Privilegwechsel nicht wirklich möglich wäre, oder versteh ich jetzt da was falsch?
-
ich habe gehofft, dass das nicht stimmt. aber: warum stimmt es nicht? man könnte das ja dann theoretisch ausnutzen um einen retf in eine höhere privilegienstufe zu machen, indem man einfach die rücksprungadresse am stack ändert. folgendes szenario: eine funktion mit cpl == 0 ruft eine funktion in einem anderen codesegment mit dpl == 2 auf. das geht noch ohne probleme. nun aber ist ja der cpl nach dem sprung gleich 2. und damit dürfte der rücksprung nicht mehr möglich sein.
kann es sein, dass der rpl da noch eine rolle spielt? was genau ist der rpl? das hab ich noch nicht verstanden. mit arpl kann man den anpassen, aber warum sollte man das wollen?
-
Afair dürfen Rücksprunge nur vom höher privilegierten zum niedrig privilegierten gehen. Für die Andere Richtung braucht man Callgates, Interruptgates oder so.
Ergo ein Programm in PL=3 kann z.B. den Kernel oder ähnliches per Interruptgate aufrufen womit man dann z.B. in PL=0 ist. Dort kann dann per retf wieder zurück nach PL03 gesprungen werden. Wenn an das retf in PL=3 versucht um in PL=0 zu kommen, gibts nen Protection Fault und adieu.
Ebenso dürfet dein Szenario nicht gehen, weil afair far calls nur nach gelich oder höher priviligeierten Orten erlaubt ist.
-
assembler schrieb:
was genau ist der rpl?
RPL ist das Requestors Privilege Level. Das ist die Privileg Ebene, die der Selector bei einem call, jmp etc. absetzt. Wenn du aus der Privileg Ebene 2 z.B. einen Callgate Descriptor aufrufst, der in der Ebene 3 liegt, dann ist das cpl = 2 und das dpl = 3.