Тоесть почему авторы ядра решили использовать именно 7-й дескриптор ? Наверно просто по порядку определили: Код (Text): 1 R0_CODE 2 R0_DATA 3 R3_CODE 4 R3_DATA 5 TSS 6 R0_PCR 7 R3_TEB А сепшины - не только при возврате на диспетчер исключений ядро восстанавливает дефолтный селектор, но также и при возврате из сервисов и пр.
Я просто обратил внимание, что RPL у селектора = 0. У всех остальных селекторов RPL=3. Поэтому и спрашиваю. По идее ведь RPL у селекторов в юзермоде может быть любым? Верно? Я меняю например DS на 18 и ничего страшного не происходит. Система его обратно восстанавливает. При смене FS на 3B система восстанавливает его в 38...
Не совсем въехал в написанное. А как-же DPL сегмента? Если можно на пальцах: CPL=3, DS с RPL<=3 обращается к сегменту с DPL=3 - все OK CPL=2, DS с RPL>2 обращается к сегменту с DPL=3 - #GP CPL=3, DS с RPL<=3 обращается к сегменту с DPL<3 - #GP Правильно ?
Из мануала intel: The processor loads the segment selector into the segment register if the DPL is numerically greater than or equal to both the CPL and the RPL. Otherwise, a general-protection fault is generated and the segment register is not loaded. То есть в примерах выше ошибка будет только в 3-м случае.
Да да, конечно. Тут еще и биты U/S и R/W всякие надо учитывать! Не понятно зачем вообще RPL вводили? От него только путаницы больше Что-то я мальца запутался... из 3-кольца нельзя получить доступ к данным 0-го. Так? из 3-кольца можно прыгнуть в нулевое через шлюз с DPL=3. Так? с 0-го уровня можно прыгнуть на шлюз 3-го или будет GP ? Доступ к данным 3-кольца есть из 0-го или опять же GP ? P.S. Clerk, спасибо за ответы
barmaley57 Тут кратко http://sasm.narod.ru слишком много вопросов, когда появится общая картина они отпадут; Вы его сами обнулили, либо у вас ось не виндоз.
Да я его не трогал Ось W2000 SP4. CS=1B, DS=ES=SS=23, GS=0, а FS=38!!! P.S. за ссылку спасибо, посмотрим.
barmaley57 Ну ладно, та версия с ошибками, точнее разными людьми писалась. Например BaseInitializeContext() загружает селектор с маской в Fs, забыли маску во всех версиях Поставьте останов на диспетчер апк - должно быть 0x3B. Вобщем есть в ядре несколько мест где селектор загружается, так вот в вашем ядре их несколько(одно - релоад сегментных регистров при доставке апк).