[0x00] Concept
이전 챕터에 이어서 VMCS Data 기준으로 VM Entry 에서 발생하는 여러가지 검사와 동작에 대해 알아보겠습니다.
[0x01] Loading MSRs
VM Entry 는 VM-entry MSR-load area 에서 MSR 을 로드합니다. (참고 : 링크)
해당 영역의 각 엔트리(VM-entry MSR-load count 값까지)은 WRMSR 에 의해 기록되는 bits 127:64 의 내용과 함께 bits 31:0으로 인덱싱 된 MSR 을 로드하여 순서대로 처리됩니다.
다음과 같은 경우 엔트리에 대한 처리가 실패하는 것에 대한 내용입니다.
- bits 31:0 의 값이
C0000100h(IA32_FS_BASE MSR) 또는C00000101h(IA32_GS_BASE MSR) 입니다. - bits 31:8 의 값이 8이며 이는
Local APIC가x2APIC mode에 있을 때 인덱싱된MSR이APIC register에 대한 접근을 허용하는 값을 의미합니다. - bits 31:0 의 값은
SMM에서만 쓸 수 있으며,VM Entry가SMM에서 시작되지 않았음을 의미합니다. - bits 31:0 의 값은 각 모델별 이유로 인해
VM Entry에 로드될 수 없는MSR을 나타냅니다. 프로세서는 일반적으로WRMSR에 의해 기록될 수 있는 경우에도 특정MSR의 로드를 방지할 수 있습니다. - bits 63:32 는 0이 아닙니다.
- bits 31:0 으로 인덱싱 된
MSR에 bits 127:64 를 쓰려고 시도하면CPL = 0인WRMSR을 통해 실행 된 경우general-protection exception이 발생합니다.
MSR-load area 의 모든 엔트리에 대한 처리가 실패하면 VM Entry 가 실패합니다. 논리 프로세서는 VM Exit 와 마찬가지로 Host-State Area(이하 “호스트 상태 영역”)에서 상태를 로드하여 이러한 오류에 응답합니다.
[0x02] Trace-Address Pre-Translation(TAPT)
Second_Intel PT uses guest physical addresses 제어 비트가 1이면 Intel PT 에서 사용하는 주소가 게스트의 물리 주소로 처리되며 이를 위해 EPT 를 사용하여 물리 주소로 변환합니다.
VM Entry 는 TAPT 를 사용하여 EPT Violation 으로 인해 버퍼링된 트레이스 데이터가 손실되는 것을 방지합니다.
TAPT 는 IA32_RTIT_CTL.TraceEn = 1 이고, Second_Intel PT uses guest physical address 제어 비트가 1인 경우에만 사용됩니다.
TAPT 는 EPT Violation, EPT Misconfiguration, Page-Modification Log-Full Event, APIC Access 로 인해 VM Exit 를 발생시킬 수 있습니다.
VM Entry 중에 TAPT 의 결과로 인해 이러한 VM Exit 가 발생하면 VM Entry 가 완료된 후(게스트 컨텍스트) VMX non-root operation 에서 발생한 것 처럼 동작합니다.
또한 VM Entry 는 VM-entry interruption-information field 의 Valid 비트가 1인 경우에도 Event Injection 을 수행하지 않습니다.
이러한 VM Exit 는 VM-entry interruption-information, VM-entry exception error code 필드의 내용을 각 IDT-vectoring error code field 에 저장합니다.
(참고 : 링크)
[0x03] Event Injection
(참고 : 링크)
VM-entry interruption-information field 내 Valid 비트가 1인 경우 Vm Entry 는 게스트 상태의 모든 구성 요소가 로드된 후, 그리고 VM-execution control fields 가 설정된 후 이벤트가 전달되거나 보류(pending)됩니다.
VM-entry interrution-information field내Interruption Type이 아래와 같은 경우 아래에 설명(Vectored-Event Injection)대로 이벤트가 전달됩니다.- 0(
external interrupt) - 3(
hardware exception) - 4(
software interrupt) - 5(
privileged software exception) - 6(
software exception)
- 0(
VM-entry interruption-information field내Interruption Type이 7(other event)이고,Vector필드가 0이면VM Entry후에MTF VM Exit가 보류됩니다.
[-] Vectored-Event Injection
VM Entry 는 VM Entry 에 의해 설정된 게스트 컨텍스트 내에서 주입된 벡터화 된 이벤트(Vectored-Event)를 제공합니다.
이것은 게스트 상태의 모든 구성 요소가 로드되고 VM-execution controls field 가 모두 설정된 다음에 이벤트가 전달됨을 의미합니다.
이벤트는 VM-entry interruption-information field 내 vector 를 이용하여 IDT 에서 설명자를 선택하여 전달합니다. (Event Injection 은 게스트 상태 영역에서 IDTR 을 로드한 후 발생하므로 게스트 IDT 입니다.)
이벤트 전달에서 중첩된 예외가 발생하면 해당 예외의 벡터를 사용하여 Exception bitmap 을 참조합니다.
- 중첩된 예외에 대한 비트가 0이면 중첩된 예외가 정상적으로 전달됩니다. 중첩된 예외인 경우
IDT를 통해 전달됩니다. 원인이 되거나Page-Fault인 경우 전달 중 중첩된 예외가 발생한 이벤트의 특성에 따라Double Fault가 발생할 수 있습니다. - 중첩된 예외에 대한 비트가 1이면
VM Exit가 발생합니다. 이에 대한 자세한 내용은 아래VM Exits During Event Injection에서 다룹니다.
[+] Details of Vectored-Event Injection
Event-Injection 과정은 VM-entry interruption-information field, VM-entry exception error-code field, VM-entry instruction-length field 에 의해 제어됩니다.
다음 항목은 Event-Injection Process에 대한 세부 정보입니다.
RFLAGS에 대해 스택에 푸시되는 값은 일반적으로 게스트 상태 영역에서 로드된 값입니다.RF플래그에 푸시된 값은 전달되는 이벤트 유형에 따라 수정되지 않습니다. 그러나Software Interrupt가virtual-8086(RFLAGS.VM = 1)모드인 게스트에 주입되는 경우RFLAGS의 푸시된 값은 수정될 수 있습니다.RFLAGS가 스택에 푸시된 후RFLAGS레지스터의 값은IDT를 통해 이벤트를 전달할 때 정상적으로 수정됩니다.- 스택에 푸시되는
IP(Instruction Pointer)는 이벤트 유형 및 이벤트 전달 중 중첩된 예외가 발생하는지 여부에 따라 달라집니다. (다음 설명에 작성 될Current Guest RIP라는 용어는 게스트 상태 영역에서 로드할 값을 나타냅니다. 이하 “현재 게스트 RIP”) 푸시된 값(Instruction Pointer)은 아래와 같이 결정됩니다.VM Entry가Interruption Type의 값이external interrupt,NMI,hardware exception유형인 이벤트를 성공적으로 주입되면(중첩된 예외 없이) 현재 게스트 RIP 가 스택에 푸시됩니다.VM Entry가Interruption Type의 값이software interrupt,privileged software exception,software exception유형인 이벤트를 성공적으로 주입하게 되면(중첩된 예외 없이) 현재 게스트 RIP 는VM-entry instruction length값 만큼 증가합니다.- 이벤트를 주입하는 동안
VM Entry에서 예외가 발생하고 해당 예외로 인해VM Exit가 발생하지 않은 경우, 이벤트 유형이나VM-entry instruction length에 관계없이 현재 게스트 RIP 가 스택에 푸시됩니다. 발생한 예외로 인해RIP를 저장하는VM Exit가 발생하는 경우 저장된RIP의 값은 현재 게스트 RIP 값 입니다.
VM-entry interruption-information field내 bit 11(deliver-error-code)이 설정된 경우(Error Code :deliver) 예외를 전달 중에 오류 코드가 푸시되므로VM-entry exception error-code field의 내용이 푸시됩니다.DR6,DR7및IA32_DEBUGCTL MSR은 이벤트에 벡터 1(debug exception)이 있더라도 이벤트 주입에 의해 수정되지 않습니다.VM Entry가software interrupt를 주입하고 게스트가virtual-8086모드에 있는 경우RFLAGS.IOPL(I/O Privilege Level) < 3이기 때문에 #GP가 발생할 수 없습니다.VMM은 이벤트를 주입하기 전에RFLAGS.IOPL을 확인하고 원하는 경우software interrupt대신 #GP 를 삽입해야 합니다.VM Entry가software interrupt를 주입하고 게스트가virtual-8086 mode extension과 함께virtual-8086모드에 있는 경우(RFLAGS.VM = 1, CR4.VME = 1), 이벤트 전달은 다음과 같이TSS의software interrupt redirection bitmap에 기반한VME-Based Interrupt Redirection의 적용을 받습니다. (CR4.VME == Virtual Mode Extension으로CR4.VMXE와 다릅니다.)- 이 내용은 해당 챕터에서 생략합니다.
VM Entry가Non-Maskable Interrupt(NMI)를 주입하고Pin_virtual NMIs제어 비트가 1인 경우VM Entry후에virtual-NMI blocking이 적용됩니다.Last-Exception Record MSR(LER)은IA32_DEBUGCTL MSR에서LBR(Last Branch Record)비트의 설정을 기반으로 업데이트될 수 있습니다. 일반적으로 전달되기 전에LBR비트를 지우는debug exception과 같은 이벤트는VM-entry event injection의 파트로LER을 업데이트하지 않을 수 있습니다.-
이벤트 주입에서 중첩된 예외가 발생하면, 이에 대한 오류 코드에서 bit 0(
EXT, External event) 의 값이 아래와 같이 결정됩니다. (오류 코드에 대한 필드의 자세한 내용은Intel SDM Vol.3A 6.13 Error Code에서 살펴볼 수 있습니다.)
- 주입되는 이벤트의
Interruption Type의 값이external interrupt,NMI,hardware exception,privileged software exception이고 중첩된 예외가 발생한 경우(double fault는 발생하지 않음) 해당 예외에 대한 오류 코드의EXT비트는 1로 설정됩니다. - 주입되는 이벤트의
Interruption Type의 값이software interrupt,software exception이고 중첩된 예외가 발생한 경우에는 해당 예외에 대한 오류 코드의EXT비트는 0으로 지워집니다. - 이벤트가 전달에서 중첩된 예외가 발생하고 해당 예외의 전달에서 다른 예외가 발생하는 경우에는 해당 예외에 대한 오류코드의
EXT비트는 1으로 설정됩니다. double fault가 발생하는 경우 오류코드는0000h이므로EXT비트는 0으로 지워집니다.
- 주입되는 이벤트의
[+] VM Exits During Event Injection
이벤트가 주입되면 VM-execution contorls 의 설정과 관계없이 VM Exit 가 곧장 발생하지 않습니다. 예를 들어 Pin_NMI exiting 제어 비트를 1으로 설정하여도 NMI 주입으로 인해 VM Exit 가 발생하지 않습니다.
하지만 아래와 같은 Event-Delivery Process 로 인해 VM Exit 가 발생할 수 있습니다.
VM-entry interruption-information field의 벡터가IDT의task gate를 식별하면 시도된task switch가VMX non-root operation에서 정상 실행 중 주입된 이벤트가 발생한 것과 마찬가지로VM Exit가 발생할 수 있습니다.- 이벤트 전달에서 중첩된 예외가 발생하면
Exception bitmap의 내용에 따라VM Exit가 발생할 수 있습니다. - 이벤트 전달에서 중첩된 예외로 인해
double-fault exception(중첩된 예외로 인해)이 생성된 경우 논리 프로세서는double-fault handler를 호출하는 동안 또 다른 중첩된 예외가 발생합니다. 이 예외는Exception bitmap으로 인해VM Exit가 발생하지 않으며, 삼중 오류(triple fault) 로 인해VM Exit가 발생합니다. - 이벤트 전달에서
double-fault exception을 주입하고Exception bitmap으로 인해VM Exit가 발생하지 않는 중첩된 예외가 발생하는 경우에는 삼중 오류로 인한VM Exit가 발생합니다. Second_virtualize APIC accesses제어 비트가 1이고 이벤트 전달에서APIC-access page를 생성하는 경우VM Exit가 발생할 수 있습니다.
Event-Delivery Process 로 인해 VM Exit 가 발생하는 경우 VMX non-root operation 에서 정상 실행 중에 이벤트 주입이 발생한 것과 마찬가지로 VM Exit 전의 프로세서 상태가 결정됩니다. 주입된 이벤트가 VM Exit 를 발생시키는 Task Gate 에 직접 액세스하거나 첫 번째 중첩된 예외가 발생하여 VM Exit 가 발생하는 경우 주입된 이벤트에 대한 정보는 IDT-vectoring information field 에 기록됩니다.
[+] Event Injection for VM Entries to Real-Address Mode
VM Entry 는 CR0.PE = 0 으로 로드되는 경우, 주입 된 vectored event 는 Real-Address Mode 에서 수행되는 것 처럼 전달됩니다.
특히 VM Entry 는 VM-entry interruption-information field 내 vector 를 이용하여 IDTR.base 의 선형 주소에 있는 interrupt-vector table 에서 4바이트 엔트리를 선택합니다.
VM Entry 후에 CR0.PE = 0 이 될 경우 VM-entry interruption-information field 는 0이어야 하기 때문에, CR0.PE = 0 으로 주입된 벡터 이벤트는 스택에 푸시하지 않습니다. 이는 Real-address mode 에서의 이벤트 전달과 일치합니다.
[-] Injection of Pending MTF VM Exits
VM-entry interruption-information field 내 interruption type 의 값이 7(other event)이고 vector 필드가 0인 경우 VM Entry 는 MTF VM Exit 가 다음에 오는 명령 경계에서 보류되도록 합니다. 이는 PR_monitor trap flag 가 0인 경우에도 해당됩니다.
[0x04] Special Features Of VM Entry
VM Entry 에 대한 다양한 기능에 대해 자세하게 설명합니다. VM Entry 는 Vectoring 되었다 라는 용어를 사용합니다. 이 용어는 다음의 조건임을 의미합니다.
VM-entry interruption-information field내valid비트가 1로 설정되어 있습니다.VM-entry interruption-information field내interruption type의 값이 아래의 유형 중 하나입니다.- 0(
external interrupt), 2(non-maskable interrupt), 3(hardware exception), 4(software interrupt), 5(privileged software exception), 6(software exception)
- 0(
[-] Interruptibility State
게스트 상태 영역에서 Non-Register State 로 분류되는 이 상태 필드(interruptibility-state field)는 STI 에 의한 차단, MOV SS 에 의한 차단, NMI 에 의한 차단을 제어하는 비트가 포함되어 있습니다.

이러한 필드는 다음과 같이 VM Entry 후 이벤트 차단에 영향을 줍니다.
VM Entry가Vectoring된 경우interruptibility-state field의 내용과 관계없이VM Entry다음에 오는STI또는MOV SS에 의한 차단이 발생하지 않습니다.VM Entry가Vectoring되지 않은 경우는 아래의 내용이 적용됩니다.- 이벤트는
interruptibility-state field의 bit 0(Block STI)이 1인 경우에만STI에 의해 차단됩니다. 이러한 차단은 게스트가 하나의 명령을 실행하거나 예외를 발생시킨 후에 지워집니다. - 이벤트는
interruptibility-state field의 bit 1(Block MOV SS)이 1인 경우에만MOV SS에 의해 차단됩니다. 이는 보류 중인debug exception처리에 영향을 미칠 수 있습니다.
- 이벤트는
NMI의 차단은 아래 내용에 따라 결정됩니다.Pin_virtual NMIs제어가 0이면interruptibility-state field의 bit 3(Block NMI)이 1인 경우에만NMI가 차단됩니다.Pin_NMI exiting제어가 0이면IRET명령이 실행되면 차단이 제거됩니다.- 다음은
Pin_virtual NMIs제어가 1인 경우interruptibility-state field에서 bit 3의 사용에 대해 설명합니다.- 비트 값은
VM Entry후NMI차단에 영향을 미치지 않습니다.NMI는VMX non-root operation에서 차단되지 않습니다. - 비트 값은
VM Entry후virtual-NMI의 차단 여부를 결정합니다. 해당 비트(bit 3)가 1이면VM Entry후virtual-NMI의 차단이 적용됩니다. 비트가 0이면VM Entry에NMI를 주입하지 않는 한virtual-NMI에 대한 차단은 없습니다.
- 비트 값은
Pin_NMI exiting제어가 0이면Pin_virtual NMIs또한 0이어야 합니다.
SMI(System-Management Interrupt)차단은 아래의 내용에 따라 결정됩니다.VM Entry가SMM에서 실행되지 않은 경우SMI차단은VM Entry에 의해 변경되지 않습니다.VM Entry가SMM에서 실행된 경우interruptibility-state field의 bit 2가 1이면VM Entry후에SMI가 차단됩니다.
[-] Activity State
게스트 상태 영역의 Non-Register State 에 해당하는 Activity State 는 VM Entry 후 논리 프로세서가 Active 상태인지 또는 식별된 inactive 상태 중 하나(HLT, Shutdown, Wait-for-SIPI)에 있는지에 대해 확인할 수 있습니다.
(참고 : 링크)
이 필드의 사용은 다음에 따라 결정됩니다.
VM Entry가Vectoring된 경우 논리 프로세서는VM Entry후에Active상태 입니다.VM Entry가Vectoring되지 않은 경우 논리 프로세서는 게스트 상태 영역에 지정된Activity State에 따라VM Entry를 끝냅니다.VM Entry이inactive상태의 논리 프로세서로 끝나는 경우VM Entry는Activity State가Active상태로 입력될 때 일반적으로 생성되는 특별한Bus Cycle을 생성합니다.VM Entry가shutdown상태의 논리 프로세서로 끝나고SMX Operation에 있는 경우Intel TXT shutdown컨디션이 발생합니다. 사용된 오류 코드는Legacy Shutdown을 나타내는0000h가 됩니다.- 일부
Activity State는 특정 이벤트를 무조건 차단합니다. 프로세서를 표시된 상태로 만드는VM Entry후에는 다음 차단이 적용됩니다.Active상태는start-up IPIs(SIPIs)를 차단합니다.SIPIs는 논리 프로세서가Active상태이고VMX non-root operation에 있는 동안 삭제되고VM Exit가 발생하지 않습니다.HLT상태는SIPIs를 차단합니다.SIPIs는 논리 프로세서가HLT상태이고VMX non-root operation에 있는 동안 삭제되고VM Exit가 발생하지 않습니다.Shutdown상태는 외부 인터럽트(external interrupt),SIPIs를 차단합니다. 논리 프로세서가Shutdown상태이고VMX non-root operation에 있는 동안Pin_external-interrupt exiting제어가 1인 경우에도VM Exit가 발생하지 않으며SIPIs는 삭제되며VM Exit가 발생하지 않습니다.Wait-For-SIPI상태는external interrupt,NMI,INIT signals,SMI(system management interrupt)를 차단합니다. 이러한 이벤트는 논리 프로세서가wait-for-SIPI상태이고VMX non-root operation에 있는 동안VM Exit가 발생하지 않습니다.
[-] Delivery of Pending Debug Exceptions after VM Entry
게스트 상태 영역의 Non-Register State 에 해당하는 Pending Debug Exception 필드는 아직 전달되지 않은 debug exception 이 있는지 여부를 나타냅니다.
다음 중 하나라도 해당되면 VM Entry 후 전달되지 않은 debug exception 이 존재하지 않습니다.
VM Entry는 해당하는interruption type(external interrupt,NMI,hardware exception,privileged software exception) 중 하나의 유형으로Vectoring됩니다.interruptibility-state field는 bit 1(block MOV SS)가 0이며VM Entry는software interrupt또는software exception중 하나의 유형으로Vectoring됩니다.VM Entry가Vectoring되지 않고activity-state field가shutdown또는wait-for-SIPI를 나타냅니다.
위의 항목 중 해당되지 않는 경우 pending debug exceptions field 는 게스트에 대해 보류 중인 debug exception 을 지정합니다. BS 비트(bit 14) 또는 enable-breakpoint 비트(bit 12)가 1인 경우 유효한 상태의 보류 중인 debug exception 이 존재합니다. 보류 중인 debug exception 이 있는 경우 아래와 같이 처리됩니다.
VM Entry가Vectoring되지 않은 경우 보류 중인debug exception은 게스트 실행에서 정상적으로 발생한 것처럼 처리됩니다.- 논리 프로세서가 이러한 예외를 차단하지 않는 경우(
interruptibility-state field내blocking by MOV SS가 0인 상태)VM Entry후debug exception이 전달됩니다. - 논리 프로세서가 이러한 예외를 차단하는 경우(
blocking by MOV SS가 1인 상태) 보류 중인debug exception은 일반적인 경우와 같이 보류 상태로 유지되거나 손실됩니다.
- 논리 프로세서가 이러한 예외를 차단하지 않는 경우(
VM Entry가Vectoring된 경우 다음 내용이 적용됩니다.- 주입을 위한
software interrupt, 벡터 3(#BP) 이나 벡터 4(#OF)를 포함한software exception,벡터 1(#DB)를 포함한privileged software exception의 경우 보류 중인debug exception은 원래대로 처리됩니다.debug trap이 발생한MOV SS이후에 해당 명령어(INT1, INT3, INTO)가 실행된 경우 게스트 실행에서 정상적으로 발생한 것 처럼 처리됩니다. - 벡터 3, 4 이외의 벡터로
software interrupt를 주입하는 경우 보류 중인debug exception은 손실되거나 주입 후에 전달될 수 있습니다.
- 주입을 위한
유효한 보류 중인 debug exception 이 없으면(위의 내용에 따른) VM Entry 후 보류 중인 debug exception 이 전달되지 않습니다.
보류 중인 debug exception 이 VM Entry 후에 전달되면 traps on the previous instruction 의 우선 순위가 있습니다.(Intel SDM Vol.3A Section 6.9)
VM Entry 후에 전달된 보류 중인 debug exception 은 Exception Bitmap 에서 bit 1(#DB)이 1인 경우 VM Exit 가 발생합니다. VM Exit 가 발생하지 않으면 DR6 는 정상적으로 업데이트 됩니다.
[-] VMX-Preemption Timer
Pin_activate VMX-preemption timer 제어가 1인 경우 VM Entry 는 VMX-preemption timer-value field 값의 unsigned 값으로 VMX-preemption timer 를 시작합니다.
VMX-preemption timer 는 VM Entry 중에 만료될 수있습니다.(ex. VMX-preemption timer-value 필드의 값이 0인 경우)
이런 상황이 발생하면 VM Exit 는 이벤트 주입 후와 VM Entry 다음에 오는 명령 실행 전에 정상적인 우선 순위로 발생합니다. 예를 들어 VM Entry 에 의해 설정된 보류 중인 debug exception 은 타이머로 인한 VM Exit 보다 우선 시 됩니다.
그 외 Interrupt-Window Exiting, Virtual-Interrupt Delivery, NMI-Window Exiting, VM Exits Include by the TPR threshold 에 대한 설명은 생략합니다.
[0x05] VM-Entry Failures During or After Loading Guest State
게스트 상태 영역 검사로 인한 VM Entry 실패, 식별된 MSR 로딩 중 실패는 VM Entry 에서 이전에 발생한 것과 다르게 처리됩니다. (참고 : 링크 및 해당 포스트 Loading MSR)
이러한 이유로 실패로 인한 처리는 아래의 순서에 따라 처리됩니다.
VM Entry실패에 대한 정보는VM-exit information field에 기록됩니다.(참고 링크)Exit Reason- Bits 15:0 (basic exit reason)
- 33 : 잘못된 게스트 상태로 인한
VM Entry실패 - 34 :
MSR로딩 중VM Entry실패 - 41 :
machine-check이벤트로 인한VM Entry실패
- 33 : 잘못된 게스트 상태로 인한
- Bit 31 (VM-entry failure)
- 1 : VM-entry failure
- 나머지 비트는 모두 0으로 설정
- Bits 15:0 (basic exit reason)
Exit Qualification- 잘못된 게스트 상태로 인한
VM Entry실패입니다. 대부분의 경우exit qualification은 0으로 설정되며 값이 존재하는 경우에는 다음과 같이 0이 아닌 값이 사용됩니다.- 1 : Not used
- 2 :
PDPTE로드 문제로 인해 실패했습니다. - 3 :
interruptibility-state field의STI차단 비트를 통해 이벤트를 차단하는 게스트에NMI를 주입하려는 시도로 인해 실패했습니다. - 4 : 잘못된
VMCS Link Pointer로 인해 실패했습니다.
- 잘못된 게스트 상태로 인한
- 프로세서 상태는
VM Exit에서 수행되는 것 처럼 로드됩니다. 결과가CR4.PAE & CR0.PG & ~IA32_EFER.LMA = 1인 경우PDPTE를 확인하고 로드할 수 있습니다. interruptibility-state field의NMI차단 상태는VM Entry이전의 상태입니다.MSR은VM-exit MSR-load영역에 지정된 대로 로드됩니다.
위의 프로세스는 VM Exit 의 프로세스와 유사하지만 이러한 VM Entry 실패에 대해 VM Exit 중에 수행되는 많은 단계가 발생하지는 않으며 아래와 같은 차이가 있습니다.
- 대부분의
VM-exit information fields가 업데이트 되지 않습니다. VM-entry interruption-information field내valid비트가 지워지지 않습니다.- 게스트 상태 영역이 변경되지 않습니다.
VM-exit MSR-store영역에MSR이 저장되지 않습니다.
[0x06] Conclusion
VM Entry 파트가 모두 마무리 되었습니다. 아직도 명확히 이해가 되지 않는 부분도 있지만 처음보단 꽤 많은 용어들과 친숙해졌습니다.
[0x07] Reference
- Intel 64 and IA-32 Architectures Software Developer’s Manual