Rambler's
Top100

Нереальный режим

Автор: lonesome TSH/Digital Daemons
Дата: .01.2003
Раздел: Разработка ОС

Как известно, начиная с 386 сегментные регистры в процессорах Intel содержат 10 байт, восемь из которых хранят запись о сегменте, которая при загрузке регистра считывается из таблицы GDT или LDT.

При переключении режимов с реального на защищенный и наоборот содержимое этой "теневой" части не теряется! Благодаря этому стала возможна следующая хитрость - можно загрузить в защищенном режиме эти регистры селекторами четырехгигабайтных сегментов и после этого возвратиться обратно в реальный режим.

Теперь (поскольку мы в реальном режиме) мы имеем доступ к прерываниям BIOS и в то же время (поскольку в теневой части сегментных регистров лежат описания четырехгигагабайтных сегментов) мы можем свободно обращаться ко всей адресуемой процессором памяти

Для перехода из защищенного режима в нереальный достаточно сбросить бит PE из управляющего регистра CR0:
mov eax, cr0
and al, 0xFE
mov cr0, eax
И после этого совершить прыжок (чтобы загрузить регистр CS):
jmp enter_unreal
При входе в функцию enter_unreal нужно записать что-нибудь в каждый сегментный регистр (содержимое теневой части сохранится!).

Rambler's Top100