Если текущий уровень привилегий закодирован в CS
, который может быть изменен кодом пользовательского режима, почему код пользовательского режима не может изменить CS
, чтобы изменить CPL
?
Почему нельзя изменить CPL при работе в непривилегированном кольце (пользовательский режим)?
Ответы (1)
Вопрос широкий, но я могу дать некоторую общую информацию и ссылки на архитектуру набора инструкций (ISA ), в котором описаны все инструкции.
Вы не можете MOV
или POP
значение в CS (на 286+1), чтобы вы не могли изменять CS таким образом. Например для POP
есть правило:
Инструкция POP не может вставить значение в регистр CS. Чтобы загрузить регистр CS из стека, используйте инструкцию RET.
И правило для MOV
аналогично:
Инструкцию MOV нельзя использовать для загрузки регистра CS.
Вы можете изменить CS косвенно через syscall
, sysenter
, FAR jmp
(через шлюз вызова), FAR call
(через вызов ворота), iret
, retf
(возврат FAR) или int
. Вы можете просмотреть ISA для каждой инструкции и какие проверки уровня привилегий применяются. Вы не можете произвольно изменить CPL, если у вас нет на это привилегий и прав доступа.
В большинстве случаев, если у вас есть право влиять на изменение CPL, оно будет изменено. Если у вас нет необходимых привилегий, вы получаете исключение (проверки уровня привилегий обычно включают RPL, CPL, DPL). Если вы используете соответствующие сегменты кода (другая тема), вы можете запросить выполнение кода с использованием сегмента кода с более высоким привилегированным DPL, но CPL останется неизменным. Это случай, когда CPL и DPL (уровень привилегий дескриптора) CS могут различаться во время выполнения кода.
Сноски
1Вам было разрешено изменять CS через POP
и MOV
на процессорах 8088/8086.
syscall
илиint3
;) - person Ruslan   schedule 02.09.2019syscall
, которая изменяетcs
вместе с кучей других регистров. То же самое для обработчиков прерываний (хотя они не используют MSR для поиска целей, вместо этого используют шлюзы прерывания в IDT). - person Ruslan   schedule 02.09.2019MOV
иPOP
не могут изменить CS или выдают исключение. Это оставляет FARCALL
иJMP
косвенно через Call Gates (или косвенно через системный вызов/ловушки/прерывания и т. д.) или используяIRED
илиRETF
(дальний возврат). Ссылка на набор инструкций для инструкции, которую вы используете для изменения CS, будет включать правила, какие изменения CPL разрешены (изменения уровня привилегий включают проверки с RPL и DPL для CS). ) - person Michael Petch   schedule 02.09.2019