x86 и RPL

Тема в разделе "WASM.BEGINNERS", создана пользователем neutrino17, 26 май 2008.

  1. neutrino17

    neutrino17 New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    1
    Как я понял, RPL используется для того, чтобы ограничить круг доступных дескрипторов по сравнению с тем, который определяет CPL. Зачем это нужно?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Сейчас уже незачем, т.к. применяется плоская модель памяти. В сегментированной модели памяти RPL нужен для понижения привилегий доступа к сегменту. Это нужно для того, чтобы менее привилегированная задача не могла подсунуть более привилегированной длинный указатель на сегмент кода, прав для которого у нее не хватает. Таким образом, более привилегированная задача будет работать с переданным длинным указателем как бы от лица привилегий кода, который передал ей этот указатель. Конечно, никто не запрещает искусственно установить RPL селектора в 0, чтобы повысить привилегии, но вызываемый код может выявить это с помощью команды 'ARPL'.

    В IA32-e плоская модель памяти -- требование процессора (есть правда, тонкости с регистрами fs & gs) а команда 'ARPL' погибла, став частью префикса REX.
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    все определяется CPL и DPL
    если DPL < CPL, то RPL не поможет
    по-моему, RPL изначально избыточен
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    rei3er
    Да, конечно, конечные привилегии считаются по max(CPL, RPL) -- если CPL больше, то учитывается именно он.

    Видимо, Intel считали, что разработчики, имея команду ARPL, не забудут проверить привилегии при получении указателя из "младших" колец :).