История изменений
Исправление vM, (текущая версия) :
x64 не предполагает выхода из защищённого режима, если он был активирован иначе как через ресет. Так в документации сказано.
Что там в документации сказано, мне не слышно, но в документации AMD написано, что из основного (64-разрядного) подрежима Long Mode можно без сброса перейти в Compatibility (32-разрядный) подрежим, тот самый, в котором 32-разрядные программы работают под управлением 64-разрядного супервизора на x64.
Если достачно привилигий, из Compatibility mode без сброса можно перейти в собственно «защищённый режим» – Legacy Protected mode, таким образом покинув Long Mode. Из Protected mode без сброса можно перейти в Real mode ( в т.ч Unreal).
Сбросом можно перейти в стартовый Real mode из любого режима. Из любого режима устройство может переключить процессор в SMM, подав сигнал на соответствующий вход.
Откуда, куда и как можно переходить, не только написано, но и нарисовано:
Figure 1-6. Operating Modes of the AMD64 Architecture https://image1.slideserve.com/3329209/slide23-n.jpg
в параграфе 1.3 Operating Modes. тома Volume 2: System Programming справочника AMD64 Architecture Programmer’s Manual
На практике могут работать и недокументированные переходы в обход документированного маршрута.
Способ выхода из Long Mode документирован в 14.7 Leaving Long Mode:
14.7 Leaving Long Mode
- Switch to compatibility mode and place the processor at the highest privilege level (CPL=0).
- Deactivate long mode by clearing CR0.PG to 0. This causes the processor to clear the LMA bit to
- The
MOV CR0
instruction used to disable paging must be located in an identity-mapped page. Once paging is disabled, the processor behaves as a standard 32-bit x86 processor. - Load CR3 with the physical base-address of the legacy page tables.
- Disable long mode by clearing EFER.LME to 0.
- Enable legacy page-translation by setting CR0.PG to 1. The instruction following the
MOV CR0
that enables paging must be a branch, and both theMOV CR0
and the following branch instruction must be located in an identity-mapped page
Исправление vM, :
x64 не предполагает выхода из защищённого режима, если он был активирован иначе как через ресет. Так в документации сказано.
Что там в документации сказано, мне не слышно, но в документации AMD написано, что из основного (64-разрядного) подрежима Long Mode можно без сброса перейти в Compatibility (32-разрядный) подрежим, тот самый, в котором 32-разрядные программы работают под управлением 64-разрядного супервизора на x64.
Если достачно привилигий, из Compatibility mode без сброса можно перейти в собственно «защищённый режим» – Legacy Protected mode, таким образом покинув Long Mode. Из Protected mode без сброса можно перейти в Real mode ( в т.ч Unreal).
Сбросом можно перейти в стартовый Real mode из любого режима. Из любого режима устройство может переключить процессор в SMM, подав сигнал на соответствующий вход.
Откуда, куда и как можно переходить, не только написано, но и нарисовано:
Figure 1-6. Operating Modes of the AMD64 Architecture https://image1.slideserve.com/3329209/slide23-n.jpg
в параграфе 1.3 Operating Modes. тома Volume 2: System Programming справочника AMD64 Architecture Programmer’s Manual
На практике могут работать и недокументированные переходы в обход документированного маршрута.
Способ выхода из Long Mode документирован в 14.7 Leaving Long Mode:
14.7 Leaving Long Mode
- Switch to compatibility mode and place the processor at the highest privilege level (CPL=0).
- Deactivate long mode by clearing CR0.PG to 0. This causes the processor to clear the LMA bit to
- The
MOV CR0
instruction used to disable paging must be located in an identity-mapped page. Once paging is disabled, the processor behaves as a standard 32-bit x86 processor. - Load CR3 with the physical base-address of the legacy page tables.
- Disable long mode by clearing EFER.LME to 0.
- Enable legacy page-translation by setting CR0.PG to 1. The instruction following the
MOV CR0
that enables paging must be a branch, and both theMOV CR0
and the following branch instruction must be located in an identity-mapped page
Исходная версия vM, :
x64 не предполагает выхода из защищённого режима, если он был активирован иначе как через ресет. Так в документации сказано.
Что там в документации сказано, мне не слышно, но в документации AMD написано, что из основного (64-разрядного) подрежима Long Mode можно без сброса перейти в Compatibility (32-разрядный) подрежим, тот самый, в котором 32-разрядные программы работают под управлением 64-разрядного супервизора на x64.
Если достачно привилигий, из Compatibility mode без сброса можно перейти в собственно «защищённый режим» – Legacy Protected mode, таким образом покинув Long Mode. Из Protected mode без сброса можно перейти в Real mode ( в т.ч Unreal).
Сбросом можно перейти в стартовый Real mode из любого режима. Из любого режима устройство может переключить процессор в SMM, подав сигнал на соответствующий вход.
Откуда, куда и как можно переходить, не только написано, но и нарисовано:
Figure 1-6. Operating Modes of the AMD64 Architecture https://image1.slideserve.com/3329209/slide23-n.jpg
в параграфе 1.3 Operating Modes. тома Volume 2: System Programming справочника AMD64 Architecture Programmer’s Manual
На практике могут работать и недокументированные переходы в обход документированного маршрута.
Способ выхода из Long Mode документирован в 14.7 Leaving Long Mode:
14.7 Leaving Long Mode
- Switch to compatibility mode and place the processor at the highest privilege level (CPL=0).
- Deactivate long mode by clearing CR0.PG to 0. This causes the processor to clear the LMA bit to
- The
MOV CR0
instruction used to disable paging must be located in an identity-mapped page. Once paging is disabled, the processor behaves as a standard 32-bit x86 processor. - Load CR3 with the physical base-address of the legacy page tables.
- Disable long mode by clearing EFER.LME to 0.
- Enable legacy page-translation by setting CR0.PG to 1. The instruction following the
MOV CR0
that enables paging must be a branch, and both theMOV CR0
and the following branch instruction must be located in an identity-mapped page