Перехват KiTrap0E в IDT

Тема в разделе "WASM.NT.KERNEL", создана пользователем Mika0x65, 14 ноя 2010.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Clerk
    Я не думаю, что проблема в отсутствии у меня KTRAP_FRAME. Допустим, выполнение происходит во второй части кода, кода уже произошел возврат из KiTrap0E. Происходит прерывание. Обработчик сохраняет контекст в своем KTRAP_FRAME и все нормально. Меня больше волнует подмена cs:eip на значения ядра -- тут не очень понятно, что будет.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Хорошего ничего не будет. Почему вы не хотите отморфить ISR ?
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Можно и отморфить. Для меня важно было понять, что происходит, а не добиться цели. Кстати, посмотрел я на ss:esp, которые в TSS. Их содержимое меняется при смене процесса точно. Не знаю насчет потоков, но, думаю, для потоков тоже.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Mika0x65
    Так у каждого потока свой стек, вот шедулер и загружает туда его.
     
  5. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Clerk

    Да, с TF - один из самых коротких и простых вариантов которые видны. Единственное что вырубает отладчег (параллельную работу).

    Думаю но ничего даже близко не видать...
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Clerk
    Ну да, просто с твоих слов я понял, что стек общий, а это не так. Поэтому несохранение trap frame ничем не грозит. В принципе, можно поставить точку останова на чтение cs:eip -- проверить, читает ли его кто-то помимо iretd или нет.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Mika0x65
    Просто в вашем понимании формирование трап фрейма не нужно для прерываний(не ловушек!). Свапконтекст вполне вероятно будет выполнен не корректно(к примеру прев. мод юзается очень много где), не говоря уже про большинство сервисов и пр. В прочем если не устраивает архитектура NT, то юзайте другую ось, например линупс. Хотя в ней маловероятно что вобще вы сможите чтото обработать на этом уровне и вам никто не поможет, ну кроме торвальдса и его бригады. Используйте морфинг и не мучайте форум, иначе ваша задача не разрешима.

    PSR1257
    Какой есчо отладчик ?
     
  8. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    (Немного обдумав) Как я понимаю, реализовать обработчик исключения можно двумя способами:

    - (1) Просто указав в IDT селектор:смещение, селектор в данном случае из GDT;
    - (2) Указав в IDT вентиль (не уверен что правильно употребил термин) задачи - таким образом обработчик прерывания выполняется как отдельная вложенная задача со своим TSS.

    Случай 2 (если винда так реализует обработку) наиболее интересен - при выполнении задачи мы имеем "бесплатное" логгирование в TSS - там останется CS:EIP указывающий на следующую команду после IRETD (по идее это JUMP @Begin: ). В таком случае достаточно получить два PageFault и во втором уже можно смотреть TSS - и патчить IRETD.