Diskussion:Sysenter — Änderungen 6965 → 10226

Zeile 4: Zeile 4:
 
: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)
 
: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. --[[Benutzer:XanClic|XanClic]] 17:07, 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. --[[Benutzer:XanClic|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ß --[[Benutzer:Sannaj|Sannaj]] 18:36, 12. Nov. 2011 (CET)