Контекст виртуальной машины
Для каждой виртуальной машины при переключении задачи сохраняется текущее состояние всех ее регистров (контекст виртуальной машины) в стеке нулевого кольца защиты. Адрес области памяти, содержащей контекст виртуальной машины, передается в регистре 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.