Значения регистра FS

Тема в разделе "WASM.WIN32", создана пользователем Wolfgang, 15 авг 2005.

Статус темы:
Закрыта.
  1. Wolfgang

    Wolfgang New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    82
    Адрес:
    Russia
    В рамках одного процесса есть несколько потоков, TEB каждого из них находится по адресу FS:0 в пользовательском режиме. Так вот, значения сегментного регистра FS в обоих потоках одинаковы и равны 0x3B, то есть селектор с этим значением описывает ОДИН сегмент, но линейные адреса, в которые преобразовывается логичнский FS:0 разные. Чем это можно объяснить?
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Ты читал последние 3 статьи? Или у тебя после них вопросы?
     
  3. Wolfgang

    Wolfgang New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    82
    Адрес:
    Russia
    Нет, пока не читал. А там есть ответ??? Что за статьи?
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Значение FS постоянно только на NT системах!

    вот что пишет Питрек: [источник]

    „I also noticed the different uses of the FS register between Windows NT and Windows 95. Under Windows NT, the FS register is always the same for each thread's TIB. This implies that the linear address for the FS selector has to change whenever a thread switch occurs. In contrast, Windows 95 dedicates a different selector for each TIB (and hence, for each thread). The linear address of a Windows 95 TIB selector doesn't change.“
     
  5. Wolfgang

    Wolfgang New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    82
    Адрес:
    Russia
    This implies that the linear address for the FS selector has to change whenever a thread switch occurs



    вот это-то мне и интересно! Каким образом меняется лиейный адрес? Меняется база сегмента, на который указывает селектор в FS, то есть изменяется сам дескриптор в GDT?
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    А возможны ли другие способы?

    Вот фрагмент ф-ции SwapContext из "первоисточника" (рrivаtе\ntоs\kе\i386\сtxswар.аsm)
    Код (Text):
    1.         mov     eax, [esi]+ThTeb        ; get user TEB address
    2.         mov     [ebx]+PcTeb, eax        ; set user TEB address
    3.  
    4. ;
    5. ; Edit the TEB descriptor to point to the TEB
    6. ;
    7.  
    8.         sti                             ; enable interrupts
    9.         mov     ecx, [ebx]+PcGdt        ;
    10.         mov     [ecx]+(KGDT_R3_TEB+KgdtBaseLow), ax  ;
    11.         shr     eax, 16                 ;
    12.         mov     [ecx]+(KGDT_R3_TEB+KgdtBaseMid), al  ;
    13.         shr     eax, 8
    14.         mov     [ecx]+(KGDT_R3_TEB+KgdtBaseHi), al
     
  7. Wolfgang

    Wolfgang New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    82
    Адрес:
    Russia
    то есть дескриптор, на который указывает селектор, постоянно меняется... спасибо
     
Статус темы:
Закрыта.