2015-01-05 6 views
4

VMCALL очень похож на инструкцию SYSENTER, отличающуюся тем, что SYSENTER предназначен для системного вызова (быстрый переход к ОС), в то время как VMCALL для гиперкадров (переход на гипервизор).Выполняет ли VMCALL-инструкцию в x86 сохранение состояния гостевого процессора

Вопрос в том, что, хотя SYSENTER не сохраняет состояние CPU, то же самое относится к VMCALL. Выдача VMCALL вызывает выход VM, но я не уверен, сохраняет ли он состояние гостевого процессора в связанной структуре VMCS или нет?

Если он сохраняет состояние процессора, то как именно мы можем передавать аргументы в гиперколле?

ответ

2

Регион VMCS разделен на 6 регионов, один из которых - зона гостя.

Государственные магазины гостя RIP, RFLAGS и RSP на каждом VMExit. Остальные гостевые GPR живут в HW сразу после VMExit.

VMCALL безоговорочно вызывает VMExit. Использование регистров в качестве аргументов остается на api VMM.

От Linux KVM API documentation:

до четырех аргументов могут быть переданы в RBX, RCX, RDX и риши соответственно. Номер гиперкассы должен быть помещен в rax, а возвращаемое значение будет , размещенное в rax. Никакие другие регистры не будут сбиты, если явно не указано конкретным гиперкали.

От Intel 64 and IA-32 Architectures Software Developer’s Manual:

эта команда ничего не делает больше, чем вызвать выход VM, регистрирующий соответствующую причину выхода.

Из вышесказанного я пришел к выводу, что VMCALL не сохраняет какое-либо состояние процессора.

+0

Это имеет смысл; оставляя регистр save/restore для программного обеспечения, является очевидным способом разработки вещей. В противном случае вам понадобится регистр управления, чтобы указать на область сохранения регистров и тому подобное. Поэтому использование 'vmcall' очень похоже на использование' syscall'; вы должны знать ABI, который вы вызываете. –

+0

Выполняет ли выход VM выход из состояния регистрации? Я не мог найти никаких полей для регулярных регистров в гостевой области VMCS в руководстве Intel. – qstack

+0

@qstack. Думаю, это должно быть сделано самим VMM. – RostakaGmfun

 Смежные вопросы

  • Нет связанных вопросов^_^