пример flat-дескриптора в gdt
os_code_l: ;флат-дескриптор кода, 0 кольцо
dw 0xffff
dw 0x0000
db 0x00
dw 11011111b *256 +10011010b
db 0x00
os_data_l: ;флат-дескриптор данных, 0 кольцо.
dw 0xffff
dw 0x0000
db 0x00
dw 11011111b *256 +10010010b
db 0x00
Там же можно посмотреть полностью как происходит переключение в pm. Сурсы можно скачать с http://kolibrios.org
А что значит jmp относительны? Относительны ведь только near-jmp'ы, да и то не все. А те, что jmp [selector:offset] - они не относительны, там cs<-selector, eip<-offset, разве нет?
Оставить комментарий
tatianant
Подскажите, каким образом можно создать в gdt flat-дексриптор (base=0, limit=ffffffff etc.) для сегмента кода и передать туда управление? И как записать код в этот сегмент. Ведь если я не записываю в базу дескриптора базу cs при переходе в p-mode, то jmp после входа в p-mode происходит явно куда-то не туда. Как бы продолжить выполнять код, находясь уже в flat-сегменте?Спасибо.