Пользуется ли винда LDT?

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

  1. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Бсод не бсод, но на #GP ты здесь нарвешься ;)
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Intel Software Developers Manual, 6.3 - Task Switching

    The processor transfers execution to another task in one of four cases:
    • The current program, task, or procedure executes a JMP or CALL instruction to a
    TSS descriptor in the GDT.
    • The current program, task, or procedure executes a JMP or CALL instruction to a
    task-gate descriptor in the GDT or the current LDT.
    • An interrupt or exception vector points to a task-gate descriptor in the IDT.
    • The current task executes an IRET when the NT flag in the EFLAGS register is set.

    Я говорил про четвёртый вариант. Откуда GP#?
    Главное выставить бит Nested Task в EFLAGS и ссылку на предыдущую задачу в своём TSS прописать.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Я извеняюсь конечно, но ты что слепой.. чётко сказано:
     
  4. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Clerk - ты за своими глазами следи.
    Ответ был непосредственно на предыдущий пост:
    Вопрос - какими командами переключаются задачи.
    Где хоть слово про Win?
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    cppasm
    Автор задал вопрос:
    Задачи переключаются програмно, переход на новую задачу выполняется в Kei386EoiHelper(), задача не корректна пока формируется её контекст(выполняется загрузка трап-фрейма), после этого инструкция Iret загрузит селектор кодового сегмента, что может считаться началом исполнения новой задачи.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Эм... а кто должен переключить задачу, чтобы это было аппаратное переключение в Вашем понимании? Монитор?
     
  7. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    И в итоге все запутались :)
     
  8. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Узнается стиль микрософт: "попробуйте отгадайте по названию, что делает функция" :)
    Eoi - это наверное сокращение от end of interrupt ?
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    barmaley57
    Ну а что непонятного?
    End-Of-Interrupt Helper for i386
     
  10. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Да все понятно! Просто название ни как не повествует о переключении потоков...
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А Kei386EoiHelper и не переключает потоки.
    Загляните в мою статью про процессы и потоки - узнаете и кто переключает и зачем, перепечатывать свой собственный текст мне откровенно впадлу.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    barmaley57
    Так трап-фрейм сказал ведь. Какимбы образом не была выполнена смена кольца защиты на нулевое(CPL), для каждого прерывания и пр. ядро формирует этот фрейм(это и есть контекст, полное состояние процессора) в текущем ядерном стеке, указатель на который сохраняется в описателе задачи - структуре ETHREAD. При возврате из прерывания этот контекст загружается в процессор. Именно это и делает та функция и название её как сказали верно. В принципе начало задачи очень расплывчато, условно можно разделить процесс загрузки новой задачи(формирование её) и начало её исполнения, формирует задачу планировщик, начиная с манипуляции структурами описывающими задачу, заканчивая переход в сегмент кода.
    Аппаратная загрузка контекста из сегмента состояния задачи не может считаться програмной(хотя это относительно, на уровне например микрокода это програмный процесс..), так как им нельзя управлять или какимто образом контролировать, например процессор нельзя прервать когда он загрузит пол TSS, это делает одна инструкция, так что свич хардварный.
     
  13. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Читал сегодня второй раз (спасибо за труд!), но пока, честно говоря, в голове каша и соображать достаточно трудно. Прочитал приличное кол-во литературы и сейчас пытаюсь сложить все в общую картину. Да и с софтайсом знаком не так давно (больше в юзермоде сидел в Olly).
    Тем не менее спасибо, что Вам не впадлу тратить свое время на ответы!

    P.S. если не секрет, давно крутитесь в этом?
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    barmaley57
    Он давно, ядро своё пишет(или написал уже..), так что вам до туда очень далеко.)
     
  15. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Главное не опускать руки :)
     
  16. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    По-моему вы заблуждаетесь, товарищ!
     
  17. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Я так понимаю: программное (как-раз то, что делает винда) - это когда программист заботится о сохранении контекста прерываемой задачи.
    Аппаратное - процессор сам сохраняет в TSS контекст задачи, загружает сегментные регистры и т.д. (то что происходит например при дальнем вызове шлюза задачи)
    Поправьте если не так.
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    barmaley57
    Я с софтайсом, увы, тоже не особо знаком, поскольку он работал только на одном компе у меня 2 года назад, а сейчас на всех компах, что у меня есть, он либо зависает, либо бсодит :dntknw:
    WinDbg всех порвёт! :)

    Да что вы говорите!
     
  20. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Вы WinDbg используете в WinXP в режиме kernel debug? Или используете для удаленной отладки (живой или через VWWare например)?
    Честно говоря, от интерфейса windbg немного офигеваешь (особенно после olly) :)
    Может ткнете носом в какую-нибудь вменяемую литературу по WinDbg? Или help читать?
    Спасибо.