Поведение процессора при переходе между кольцами - PullRequest
0 голосов
/ 26 декабря 2018

Я не могу найти какую-либо конкретную информацию о том, что действительно происходит со стандартным процессором (например, x86), когда какой-либо код ядра (кольцо 0) выполняет «вызов» подпрограммы кода пользователя (кольцо 3).

1) При выполнении этой подпрограммы статус режима ЦП меняется на Пользовательский режим?

2) После выполнения последней команды 'ret' в подпрограмме уровня пользователя возникает исключение из-за попыткивернуться к коду пространства ядра?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

call s может только повысить привилегию, в то время как ret s может только понизить ее.
Глава 5 Руководства Intel 3A предоставит полную информацию.


Если ядро ​​выполняет дальний вызов к сегменту пользовательского режима, тогда поднимается #GP, и это может вызвать панику / проверку системы.
Если вызов был близок к привилегии, он останется прежним;при условии плоской модели и сопоставленной цели это общий вектор атаки для повышения привилегий .

Если приложение пытается выполнить ret для более привилегированного сегмента, то #GP являетсяподнял.

0 голосов
/ 26 декабря 2018

Вы используете iret из ядра для возврата в пространство пользователя.

Системные вызовы и прерывания запускают код ядра;в нормальной ОС ядро ​​не call far снижает уровни привилегий.

И да, я думаю, ret far не сможет поднять уровень привилегий обратно до кольца 0 с кольца 1..3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...