Почему в винде у юзермодных приложений FS=38 ?

Тема в разделе "WASM.BEGINNERS", создана пользователем barmaley57, 13 авг 2009.

  1. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Это как-то связано с SEH ?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Тоесть почему авторы ядра решили использовать именно 7-й дескриптор ?
    Наверно просто по порядку определили:
    Код (Text):
    1. 1   R0_CODE
    2. 2   R0_DATA
    3. 3   R3_CODE
    4. 4   R3_DATA
    5. 5   TSS
    6. 6   R0_PCR
    7. 7   R3_TEB
    А сепшины - не только при возврате на диспетчер исключений ядро восстанавливает дефолтный селектор, но также и при возврате из сервисов и пр.
     
  3. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Я просто обратил внимание, что RPL у селектора = 0. У всех остальных селекторов RPL=3. Поэтому и спрашиваю.
    По идее ведь RPL у селекторов в юзермоде может быть любым? Верно? Я меняю например DS на 18 и ничего страшного не происходит. Система его обратно восстанавливает. При смене FS на 3B система восстанавливает его в 38...
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Сегмент доступен если CPL >= RPL, поэтому ядерный код загружает селекторы с маской.
     
  5. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Не совсем въехал в написанное. А как-же 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

    Правильно ?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    DPL >= CPL, иначе исключение общей защиты.
     
  7. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Из мануала 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-м случае.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    barmaley57
    Это зависит от типа сегмента.
     
  9. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Да да, конечно. Тут еще и биты U/S и R/W всякие надо учитывать!
    Не понятно зачем вообще RPL вводили? От него только путаницы больше :)

    Что-то я мальца запутался...
    из 3-кольца нельзя получить доступ к данным 0-го. Так?
    из 3-кольца можно прыгнуть в нулевое через шлюз с DPL=3. Так?
    с 0-го уровня можно прыгнуть на шлюз 3-го или будет GP ?
    Доступ к данным 3-кольца есть из 0-го или опять же GP ?

    P.S. Clerk, спасибо за ответы
     
  10. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    И все-таки, возвращаясь к теме, непонятно почему FS содержит селектор с RPL=0, а не 3
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    barmaley57
    Тут кратко http://sasm.narod.ru слишком много вопросов, когда появится общая картина они отпадут;
    Вы его сами обнулили, либо у вас ось не виндоз.
     
  12. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    barmaley57
    Учитывать в этом случае надо только бит согласованности.
     
  13. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Да я его не трогал :) Ось W2000 SP4. CS=1B, DS=ES=SS=23, GS=0, а FS=38!!!

    P.S. за ссылку спасибо, посмотрим.
     
  14. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Это который "conforming" что-ли?
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    [5.00.2195.6688]: Fs = 0x3B.
    Как вы это значение смотрите ?
     
  16. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Olly и SoftIce показывают 38
     
  17. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    В WinXP SP2 FS как и ожидалось 3B
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    barmaley57
    Ну ладно, та версия с ошибками, точнее разными людьми писалась. Например BaseInitializeContext() загружает селектор с маской в Fs, забыли маску во всех версиях :)
    Поставьте останов на диспетчер апк - должно быть 0x3B. Вобщем есть в ядре несколько мест где селектор загружается, так вот в вашем ядре их несколько(одно - релоад сегментных регистров при доставке апк).
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    *загружает селектор без маски в Fs
     
  20. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    В общем это глюк :)

    Спасибо за информацию. Пора ко сну отходить.
    Удачи!