SYSENTER/SYSEXIT и FLAT сегменты

Тема в разделе "WASM.OS.DEVEL", создана пользователем ORANGIX, 11 апр 2007.

  1. ORANGIX

    ORANGIX New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    18
    Курю ИнтелБук :) по теме сабжа. Все вроде ясно, кроме того, зачем при возврате по SYSEXIT сегмент возврата принудительно переводится во FLAT (0-4Гб). Ведь он после этого ритуального действа сможет завалить всю систему в теории?

    P.S. Да и зачем разрешать установку произвольного EIP для входа в r0 ведь это практически то же самое, что разрешить jmp в неподчиненный сегмент с DPL<CPL. С этим же боролись как раз раньше :) Или теперь скорость и остальное параллельно?

    Всем пасиба
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    эта установка может быть произведена только в r0.
    sysexit делает cpl=dpl=3, а sysenter cpl=dpl=0
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    уж dpl она точно не "делает" =) если он не такой, она просто падает
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    "SYSENTER модифицирует дескрипторы используемых сегментов - сегмент кода будет иметь DPL=0, базу 0, лимит 4гб, тсанет доступным для чтения и 32битным,сегмент стека ...(аналогично сегмент стека только доступен на запись)... Кроме того, селекторы CS и SS получают RPL=0.... SYSEXIT... предназначена для передачи управления в бессегментную модель памяти с CPL=3 и она также модифицирует дескрипторы. Сегмент кода получает DPL=3,базу 0, лимит 4 Гб, доступ для чтения, перестает быть подчиненным, становится 32битным...(аналогично сегмент стека только доступен на запись)... Кроме того, селекторы CS и SS получают RPL=3"
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    новости какието=\ не знал, у меня этого не было написано
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Зубков С.В. "Асм: язык неограниченных возможностей"
     
  7. ORANGIX

    ORANGIX New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    18
    ага, все я докатил до этого :) пасиба

    тока всеж я никак не осознаю зачем нам бессегментная модель при возврате? Зачем тогда вообще делить пространство процессов на сегменты, если после первого сист вызова дескриптор становится flat?

    В мануале Интела есть точно, только не объясняется зачем это сделано
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    честно говоря я тоже не совсем понимаю, зачем при вызове sysenter/sysexit изменять значения дескрипторов
    разве что только для того, чтобы избежать проверки прав при переходе, за счет чего, видимо, ускоряется переход в ring0 и в ring3
     
  9. ORANGIX

    ORANGIX New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    18
    rei3er
    ну я теоретически понимаю зачем это делать при переходе из r3 в r0 - ведь у на жестко задан селектор + EIP те мы попадаем в нашу процедуру точно, а она по определению не должна ничего портить. Но опять же зачем базу и лимит менять.

    P.S. Кстати я тут подумал вдруг :) Вообщем мне сейчас не на чем проверить...но, мы EIP то задаем относительно базы сегмента? Или сразу линейный? У нас ведь база дескиптора ставится в 0 ДО перехода. Если так, то становится очевидно зачем все эти танцы с бубном
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    относительно базы вроде
     
  11. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну... EIP всегда задается относительно базы в CS
     
  12. ORANGIX

    ORANGIX New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    18
    Это да :) Но перед переходом база сегмента делает 0x0 :) О чем сказано в мануальчеге )
     
  13. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    какая фиг разница, главное что работоет