Контекст виртуальной машины
Для каждой виртуальной машины при переключении задачи сохраняется текущее состояние всех ее регистров (контекст виртуальной машины) в стеке нулевого кольца защиты. Адрес области памяти, содержащей контекст виртуальной машины, передается в регистре EBP.
Форматы соответствующих структур определены в файле vmm.inc (структуры Client_Reg_Struc, Client_Word_Reg_Struc, Client_Byte_Reg_Struc). В них определены следующие поля:
| Client_EDI | Client_SS |
| Client_ESI | Client_ES |
| Client_EBP | Client_DS |
| Client_EBX | Client_FS |
| Client_EDX | Client_GS |
| Client_ECX | Client_Alt_EIP |
| Client_EAX | Client_Alt_CS |
| Client_Error | Client_Alt_ESP |
| Client_EIP | Client_Alt_SS |
| Client_CS | Client_Alt_ES |
| Client_EFlags | Client_Alt_DS |
| Client_ESP | Client_Alt_FS |
| Client_Alt_EFlags | Client_Alt_GS |
| Client_DI | Client_IP |
| Client_SI | Client_Flags |
| Client_BP | Client_SP |
| Client_BX | Client_Alt_IP |
| Client_DX | Client_Alt_Flags |
| Client_CX | Client_Alt_SP |
| Client_AX | |
| Client_BL | Client_CL |
| Client_BH | Client_CH |
| Client_DL | Client_AL |
| Client_DH | Client_AH |
Обращение к этим полям не вызывает никаких проблем:
movzx eax, [ebp.Client_AX]
Функция драйвера, вызванная из виртуальной машины, может изменить контекст этой виртуальной машины, изменив содержимое полей перечисленных выше структур данных.
Конкретные примеры процедур, работающих с контекстом виртуальной машины, мы приведем при описании исходного текста виртуального драйвера VXDSRV.