Sysenter — Änderungen 6022 → 6041

Zeile 4: Zeile 4:
 
== Funktionsweise ==
 
== Funktionsweise ==
 
Wenn ''sysenter'' ausgeführt wird, dann lädt der Prozessor einige Werte aus bestimmten [[MSR|MSRs]] in die entsprechenden Register. So wird der Wert aus dem MSR 0x174 (IA32_SYSENTER_CS) in CS geladen, außerdem wird zu diesem Wert noch 8 addiert und das Ergebnis in SS geladen. Bei beiden Werten wird die Privilegstufe auf 0 gesetzt. Der Wert aus dem MSR 0x175 (IA32_SYSENTER_ESP) kommt nach ESP und aus 0x176 (IA32_SYSENTER_EIP) nach EIP.<br />
 
Wenn ''sysenter'' ausgeführt wird, dann lädt der Prozessor einige Werte aus bestimmten [[MSR|MSRs]] in die entsprechenden Register. So wird der Wert aus dem MSR 0x174 (IA32_SYSENTER_CS) in CS geladen, außerdem wird zu diesem Wert noch 8 addiert und das Ergebnis in SS geladen. Bei beiden Werten wird die Privilegstufe auf 0 gesetzt. Der Wert aus dem MSR 0x175 (IA32_SYSENTER_ESP) kommt nach ESP und aus 0x176 (IA32_SYSENTER_EIP) nach EIP.<br />
−
Weiterhin wird das VM-Flag im EFLAGS-Register gelöscht.
+
Weiterhin werden das VM- und das Interruptflag im EFLAGS-Register gelöscht.
  
 
Wird ''sysexit'' ausgeführt, so wird zuerst 16 zum Wert aus IA32_SYSENTER_CS addiert und das Ergebnis in CS geladen. Weiterhin wird zum gleichen Wert (IA32_SYSENTER_CS) nochmals 8 (also insgesamt 24) addiert und dieses Ergebnis nach SS kopiert. Die Privilegstufen beider Selektoren werden auf 3 gesetzt. EIP wird auf den Wert aus EDX gesetzt und ECX wird nach ESP kopiert. '''Wichtig: EDX und ECX müssen vor sysexit vom Betriebssystem gesetzt werden, sysenter speichert keine Informationen über Rücksprungadresse und "ehemaliges" ESP!'''
 
Wird ''sysexit'' ausgeführt, so wird zuerst 16 zum Wert aus IA32_SYSENTER_CS addiert und das Ergebnis in CS geladen. Weiterhin wird zum gleichen Wert (IA32_SYSENTER_CS) nochmals 8 (also insgesamt 24) addiert und dieses Ergebnis nach SS kopiert. Die Privilegstufen beider Selektoren werden auf 3 gesetzt. EIP wird auf den Wert aus EDX gesetzt und ECX wird nach ESP kopiert. '''Wichtig: EDX und ECX müssen vor sysexit vom Betriebssystem gesetzt werden, sysenter speichert keine Informationen über Rücksprungadresse und "ehemaliges" ESP!'''