x86 и RPL

Discussion in 'WASM.BEGINNERS' started by neutrino17, May 26, 2008.

  1. neutrino17

    neutrino17 New Member

    Blog Posts:
    0
    Как я понял, RPL используется для того, чтобы ограничить круг доступных дескрипторов по сравнению с тем, который определяет CPL. Зачем это нужно?
     
  2. Mika0x65

    Mika0x65 New Member

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

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

    rei3er maxim

    Blog Posts:
    0
    все определяется CPL и DPL
    если DPL < CPL, то RPL не поможет
    по-моему, RPL изначально избыточен
     
  4. Mika0x65

    Mika0x65 New Member

    Blog Posts:
    0
    rei3er
    Да, конечно, конечные привилегии считаются по max(CPL, RPL) -- если CPL больше, то учитывается именно он.

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