2017-12-05 3 views
0

warum ist es die folgende Anleitung muss virtualisiert werden. Wie kann dies zu Problemen führen, wenn dies nicht virtualisiert wird?Was sind die Gründe für die Virtualisierung dieser Anweisungen?

  1. SGDT, sldt, SIDT, smsw
  2. FCALL, Weitsprung, srt
  3. LAR, Verr, verw, LSL
  4. PUSHF, POPF, IRET
+0

Stellen Sie sich vor, was passieren würde, wenn ein Client ausgeführt würde, sagen wir, 'sgdt'. –

+0

Ich nehme an, 'srt' sollte' str' sein. Die Liste in 1 sind Anweisungen, die den privilegierten Status bestimmen können. Sie ändern den Zustand nicht wirklich, aber sie haben Zugang dazu. Die Liste in 2 sind Aufruf- und Interrupt-Gate-Befehle. Die Liste in 3 würde erlauben, auf Deskriptorinformationen zuzugreifen (lesen), und die letzte Gruppe erlaubt den Zugriff auf Flags von dem VMM. Also würden diese Anweisungen, wenn sie nicht virtualisiert sind, Informationen verlieren. Das Betriebssystem könnte erkennen, dass es in einer virtualisierten Umgebung ausgeführt wurde. Dies alles wird zu einem Problem, wenn der VMM in Ring 0 und das Betriebssystem in einem Benutzerring ausgeführt wird. –

Antwort

0

Ändern des Maschinenzustands (Segmentbasen/-limits, Interrupts deaktivieren usw.) kann natürlich nicht erlaubt sein, oder der Gast könnte aus der VM ausbrechen oder zumindest aufhängen. (. B. durch eine Endlosschleife mit deaktivierten Interrupts ausgeführt wird)

pushf/popf sind etwas subtiler: erinnern, dass IF (Die Interrupts-Freigabe-Bit, das cli/sti Flip) eines der Bits in EFLAGS ist.

Sie möchten, dass die physische Maschine Interrupts aktiviert, während der Gast Interrupts deaktiviert. Sie möchten aber auch, dass der Gast IF=0 anzeigt, wenn er auf dem virtuellen x86, auf dem er ausgeführt wird, die Funktion "Interrupts" deaktiviert hat. Also müssen Sie pushf sowie popf virtualisieren.

2

Wenn der Intel VMX-Modus für die Virtualisierung verwendet wird, was bei aktuellen Virtualisierungslösungen auf Intel-Plattformen der Fall ist, muss keine dieser Anweisungen vom VMM virtualisiert werden, da sie nicht auf den geschützten Maschinenzustand zugreifen oder ihn ändern.

Der VMM ist berechtigt (aber nicht erforderlich), einen VM-Exit für sgdt, sldt, sidt und str anzufordern. Darüber hinaus führt keine der aufgeführten Anweisungen zu einem VM-Exit.

Der Prozessor selbst führt kleinere Virtualisierung von zwei dieser Anleitung:

  • Das Verhalten von SMSW wird im Gast geändert, so dass der Gast den Wert sieht der VMM will es.

  • Das Verhalten der IRET-Anweisung wird im Gast geändert, um NMI-Blockierung zu löschen.

+0

Die Möglichkeit, einen VM-Exit für lgdt, sgdt, lidt, sidt usw. anzufordern, war in den frühen Versionen von VMX nicht verfügbar. Es wurde später hinzugefügt. Zu der Zeit, als es hinzugefügt wurde, wusste ich, wofür es nützlich war, aber ich erinnere mich nicht. – prl

Verwandte Themen