Diskussion:Sysenter

Aus Lowlevel
Wechseln zu:Navigation, Suche

Woher weiß ich eigentlich den Wert von EIP und ESP vor sysenter? --user94 20:43, 22. Jan. 2010 (CET)

ESP ist meistens das, was du auch im TSS für ESP0 eintragen würdest – und EIP entspricht halt dem Einsprungspunkt im Kernel, bei Syscalls per Interrupt war das eben der Beginn der ISR. Oder meinst du EIP und ESP, wenn zum Programm zurückgekehrt werden soll? Dann macht man wohl am besten ein Label hinter das sysenter um EIP zu bekommen und ESP kann man ja einfach auslesen. --XanClic 21:58, 22. Jan. 2010 (CET)
Ich meine letzteres. Aber dann muss das Programm ja irgendwie die Rücksprungadresse als Argument mitgeben, weil sie nicht gespeichert wird(beim Aufruf von sysenter). Oder hab ich da was falsch verstanden?--user94 15:53, 23. Jan. 2010 (CET)
„EIP wird auf den Wert aus EDX gesetzt und ECX wird nach ESP kopiert.“ – das heißt, das Programm muss dem OS irgendwie mitteilen, welche Werte es vor sysexit in EDX und ECX laden soll. Wie das geschieht, ist OS-abhängig (z. B. kann das eben in ECX und EDX übergeben werden oder in irgendwelchen anderen Registern, oder es ist festgelegt (das Programm müsste in diesem Fall beim Start dem OS mitteilen, wohin nach jedem sysenter gesprungen werden soll)). In jedem Fall ist es aber implementationsspezifisch – du musst bestimmen, wie diese Argumentübergabe aussehen soll. --XanClic 17:07, 23. Jan. 2010 (CET)

Ich hab mir noch mal die Spezifikation angeschaut. Es ist nicht vorgeschrieben, wie genau die Einträge in der GDT auszusehen haben. Es gilt nur. Bei Sysenter: CS = IA32_SYSENTER_CS DS = IA32_SYSENTER_CS + 100b (Zeigt dann auf den Eintrag nach IA32_SYSENTER_CS.)

Bei Sysexit: CS = IA32_SYSENTER_CS + 1000b (Zeigt auf den 2. Eintrag nach IA32_SYSENTER_CS.) DS = IA32_SYSENTER_CS + 1100b (Zeigt auf den 3. Eintrag nach IA32_SYSENTER_CS.)

Gruß --Sannaj 18:36, 12. Nov. 2011 (CET)

Das Intel Manual spricht von "flat segments". Einmal in Volume 1 - 5.14 System Instructions und einmal in der Instruction Set Reference. Dort wird sogar auf alle Flags eingegangen. Also ist das hier im Wiki korrekt beschrieben. --Jidder 01:55, 13. Nov. 2011 (CET)