무제한 게스트 모드가 지원/활성화되었는지 확인하기 위해 이 레지스터의 출력인 MSR - IA32_VMX_PROCBASED_CTLS2를 어떻게 덤프할 수 있습니까?
맥락은 호기심이다.
mac osx의 경우 Docker가, Windows의 경우에는 무제한 모드/무제한 게스트 모드가 필요하다는 것을 알고 있습니다.
그리고 나는 읽었다
https://software.intel.com/en-us/forums/virtualization-software-development/topic/277958
"특정 CPU가 무제한 게스트의 '1' 설정과 기타 여러 가상화 기능을 지원하는지 알려주는 일련의 MSR이 있습니다. 특정 MSR은 IA32_VMX_PROCBASED_CTLS2이며 무제한 게스트는 보조 프로세스 제어 VMCS에서 비트 7이라고 생각합니다. 필드."
powershell이나 wmic이 그것을 보여줄지 모르겠습니다. win7 32비트에 디버그가 있다는 것을 알고 있습니다(표시할 수 있습니까? 디버그가 일부 레지스터를 표시할 수 있다는 것을 알고 있습니다. 한 번 디버그를 사용하여 값을 AX 레지스터로 이동한 적이 있습니다). 하지만 win7 64비트를 사용하고 있고 디버그가 없습니다.
아마도 어셈블리에 대해 조금 아는 사람이라면 해당 레지스터의 비트를 표시하기 위해 어떤 어셈블러를 설치해야 하고 어떤 라인을 실행해야 하는지 보여줄 수 있을까요?
나는 stackoverflow에 대해 물어볼 만큼 조립에 능숙하지 않습니다. 왜냐하면 이 단계에서는 지금 '수퍼유저' 각도에서 이 문제에 접근하고 있기 때문입니다.
답변1
Linux용 도구가 있는 것처럼 Windows에도 MSR을 읽고 쓸 수 있는 도구가 있다고 가정합니다.msr 도구. 이 도구는 두 가지 명령 rdmsr
과 wrmsr
. 명령을 사용하여 MSR 값을 읽을 수 있습니다 rdmsr
. 여기는링크Window용 도구 중 하나입니다.
IA32_VMX_PROCBASED_CTLS
프로세서 기반 실행에는 두 가지 VM 실행 제어, 즉 기본 프로세서 기반 VM 실행 제어( )와 보조 프로세서 기반 VM 실행 제어( ) 가 있습니다 IA32_VMX_PROCBASED_CTLS2
. 무제한 게스트 모드 비트는 IA32_VMX_PROCBASED_CTLS2
(이미 질문에서 언급했듯이) 의 일부입니다 . 보조 프로세서 기반 VM 실행 제어는 비트 63이 IA32_VMX_PROCBASED_CTLS
1인 경우에만 사용할 수 있습니다. (섹션 24.6.2 참조)인텔 SDM)
IA32_VMX_PROCBASED_CTLS
따라서 먼저 using을 읽고 rdmsr
비트 63이 1인지 아닌지 확인 해야 합니다 . 비트 값이 다음과 같은 경우1IA32_VMX_PROCBASED_CTLS2
그런 다음 동일한 명령을 사용하여 읽으십시오 .
두 MSR의 주소는 다음과 같습니다.
IA32_VMX_PROCBASED_CTLS - 482H
IA32_VMX_PROCBASED_CTLS2 - 48BH
Linux의 명령:
sudo rdmsr 0x482 // To read IA32_VMX_PROCBASED_CTLS
sudo rdmsr 0x48B // To read IA32_VMX_PROCBASED_CTLS2
명령 의 출력은 rdmsr
16진수이며 수동으로 이진수로 변환하거나 일부 온라인 도구를 사용할 수 있습니다.
이제 Unrestricted Guest in에 대한 비트를 확인해야 하며 IA32_VMX_PROCBASED_CTLS2
이를 위해 위치 7의 비트를 확인해야 합니다(다음 이미지 참조).
IA32_VMX_PROCBASED_CTLS2
다른 옵션도 확인하려는 경우를 대비하여 전체 구조를 추가합니다 .