Вход в защищенный режим 3-го кольца

Тема в разделе "WASM.OS.DEVEL", создана пользователем NoName, 30 окт 2007.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    как можно из реального режима войти сразу в защищенный режим третьего кольца?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Не совсем понятно, что имеется в виду, но предположу, что нужно выполнить код, находящийся в третьем кольце, причем сразу после перехода в защищенный режим. Если так, то должна помочь инструкция 'far ret' вместо первого 'jmp far'. Стек, соответственно, надо подготовить заранее.
     
  3. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Вообще после mov cr0, xxxxx, устанавливающей PE, проц уже в защищенном режиме и однозначно в нулевом кольце. А дальше far ret, iret, sysexit - как угодно, для передачи управления в 3 кольцо. Как сделать, чтобы после mov cr0, xxxxx проц был сразу 3 кольце - хз. Есть правда мысля - зайти в протмоду, вернуться обратно в реал, установив в атрибутах
    сегментов реального режима DPL = 3, т.е. по сути перейти в unreal mode. Вроде должно прокатить, но не факт, да и непонятно какая практическая ценнность подобного изврата.
     
  4. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Не уверен, что в таком случае проц позволит выполнить mov cr0,xxxxx. В анриалмоде вообще
    много странностей, надо посмотреть.
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    жестко, пока решил обойтись все-таки нормальным входом. Спасибо.
     
  6. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Medstrax
    А собственно почему однозначно в нулевом? ИМХО все зависит от дескриптора кода - если там DPL=0, то в нулевом, а если DPL=3, то в третьем... jmp far -то делается не в космос, а во вполне определенный сегмент...
     
  7. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    После mov cr0,.... до команды jmp (ну или любой другой, вызывающей загрузку нового селектора) привилегии остаются теми же, что были и в реалмоде, т.е. DPL = 0. И сама команды jmp выполняется на этом же уровне привилегий.
     
  8. Pushkoff

    Pushkoff New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    40
    Адрес:
    Донецк
    Где то читал, что процессор, сразу после перехода в защищенный режим, хавает только одну инструкцию, это jmp far, так как эта инструкция попадает на конвеер вместе с коммандой mov cr0, ..., любая другая комманда попавшая на конвеер после мов и приводящая к чтению памяти выведет процессор в неопределенное состояние...
    я это ниразу не проверял, кто проверял поделитесь результатами...
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Pushkoff
    имхо, ложь
     
  10. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Pushkoff

    Нет, процессор продолжает работать, как обычно. JMP не обязательно ставить сразу после переключения в защищённый режим, но надо хорошо представлять себе, что делаешь, поскольку переход нужен для занесения новых значений в теневые регистры селекторов и для очистки очереди предвыбранных команд -- в общем, для продолжения выполнения "с чистого листа" в соответствии с новым режимом. Поэтому обычно лучше перестраховаться и выполнить переход сразу после переключения режима.
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Pushkoff, действительно ты ошибаешься. После включения защищенного режима мы обычно находимся в 16-разрядном кодовом сегменте для чтения/исполнения с базой, унаследованной из реального режима и лимитом 0xFFFF (на самом деле наследуются все эти параметры, просто в реальном режиме обычно они являются именно такими), CPL=0. Переход выполняют во-первых для того, чтобы оказаться в 32-разрядном кодовом сегменте, а во-вторых, чтобы избавиться от совершенно неактуального значения нетеневой части регистра CS.
     
  12. Pushkoff

    Pushkoff New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    40
    Адрес:
    Донецк
    Спасибо...
    Это проверенные результаты или предположения??
     
  13. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Насчет CPL не уверен, поэтому и написал отдельно. К тому же я где-то читал, что на i386 лимит сегмента кода в реальном режиме принудительно устанавливается равным 0xFFFF, но кто их сейчас использует в ПК...