Przed pojawieniem się rozszerzeń wirtualizacji sprzętowej w architekturze x86 nie było żadnych mechanizmów zapewniających mapy niewidoczne dla oprogramowania (f-map) ani pułapki (VM-fault). Nadal jednak możliwe byłoby zaimplementowanie VMM na mechanizmach widocznych dla oprogramowania (pamięć wirtualna i wyjątki sprzętowe). Pytanie brzmi, czy architektura x86 spełnia wymagania wirtualizacji Popka i Goldberga? Pierwsze twierdzenie wirtualizacji mówi, że zestaw wrażliwych instrukcji powinien być podzbiorem instrukcji uprzywilejowanych. Architektura x86 nie spełnia tego wymogu, ponieważ jej zestaw instrukcji zawiera wrażliwe instrukcje, które nie należą do zestawu instrukcji uprzywilejowanych.10 Aby zrozumieć, dlaczego jest to ważne ograniczenie, przyjrzyjmy się bliżej jednej z tych instrukcji. Naszym studium przypadku jest instrukcja Store Interrupt Descriptor Table Register (SIDT), która przechowuje zawartość rejestru IDTR, składającą się z rozmiaru i podstawy bieżącego IDT11, w adresie pamięci jego operandu docelowego. Wiadomo, że instrukcja SIDT jest problematyczna, ponieważ można ją wykonać w trybie użytkownika, aby pobrać adres jądra bieżącego IDT. Ta sytuacja zmusiła programistów jądra do podjęcia środków, takich jak mapowanie IDT z dala od reszty jądra i uczynienie go tylko do odczytu, aby zapobiec jego wykorzystaniu jako wektora eksploatacji.
UWAGA Intel w końcu wprowadził funkcję o nazwie User-Mode Instruction Prevention (UMIP12), aby zabronić wykonywania w trybie użytkownika następujących instrukcji: SGDT, SIDT, SLDT, SMSW i STR. Wszystkie te instrukcje są poufne i nieuprzywilejowane!
Wdrożenie VMM dla x86 wymagałoby przejęcia mechanizmu pułapki poprzez zainstalowanie własnego IDT VMM i zapewnienie gościom zwirtualizowanych IDT, które z ich perspektywy powinny być nieodróżnialne od prawdziwych IDT. Maszyna wirtualna nie powinna mieć możliwości wykonywania kodu w Ring-0, aby upewnić się, że każda próba wykonania w niej uprzywilejowanej instrukcji spowoduje ogólny błąd ochrony (#GPF). W ten sposób VMM może przechwytywać i emulować uprzywilejowane instrukcje wykonywane przez maszyny wirtualne. W jaki sposób SIDT może zakłócać działanie tego VMM? Wyobraź sobie maszynę wirtualną wykonującą kod jądra w Ring-3. Ten kod jądra chce uzyskać informacje o swoim własnym wirtualnym IDT i robi to, wykonując instrukcję SIDT. Ponieważ nie jest to uprzywilejowana instrukcja, procesor ją wykonuje i nigdy nie występuje #GPF. Gość nie otrzymuje „IDTR” swojego własnego wirtualnego IDT, ale zawartość IDTR rzeczywistego IDT zainstalowanego przez VMM. Właściwość równoważności jest uszkodzona, a właściwość kontroli zasobów jest naruszona przez ujawnienie poufnych informacji o hoście gościowi.