LINUX.ORG.RU

История изменений

Исправление 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

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#page=73

На практике могут работать и недокументированные переходы в обход документированного маршрута.

Способ выхода из Long Mode документирован в 14.7 Leaving Long Mode:

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#G20.888207

14.7 Leaving Long Mode

  1. Switch to compatibility mode and place the processor at the highest privilege level (CPL=0).
  2. Deactivate long mode by clearing CR0.PG to 0. This causes the processor to clear the LMA bit to
  3. 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.
  4. Load CR3 with the physical base-address of the legacy page tables.
  5. Disable long mode by clearing EFER.LME to 0.
  6. 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 the MOV 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

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#page=73

На практике могут работать и недокументированные переходы в обход документированного маршрута.

Способ выхода из Long Mode документирован в 14.7 Leaving Long Mode:

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#G20.888207

14.7 Leaving Long Mode

  1. Switch to compatibility mode and place the processor at the highest privilege level (CPL=0).
  2. Deactivate long mode by clearing CR0.PG to 0. This causes the processor to clear the LMA bit to
  3. 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.
  4. Load CR3 with the physical base-address of the legacy page tables.
  5. Disable long mode by clearing EFER.LME to 0.
  6. 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 the MOV 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

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#page=73

На практике могут работать и недокументированные переходы в обход документированного маршрута.

Способ выхода из Long Mode документирован в 14.7 Leaving Long Mode:

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#G20.888207

14.7 Leaving Long Mode

  1. Switch to compatibility mode and place the processor at the highest privilege level (CPL=0).
  2. Deactivate long mode by clearing CR0.PG to 0. This causes the processor to clear the LMA bit to
  3. 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.
  4. Load CR3 with the physical base-address of the legacy page tables.
  5. Disable long mode by clearing EFER.LME to 0.
  6. 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 the MOV CR0 and the following branch instruction must be located in an identity-mapped page