ring0 tracer

Тема в разделе "WASM.BEGINNERS", создана пользователем overwriter, 8 авг 2007.

  1. overwriter

    overwriter New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    6
    Собственно вопрос:
    Подскажите рецепт, как реализовать подобное...
    или что почитать.
    Интересует загрузка драйвера и его отладка, установка бряков.
    спасибо
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А собственно в чем проблема? Ставишь бряки либо CC, либо аппаратные (DRx в контексте нужного потока), ставишь свои обработчики INT 1 / INT 3 в IDT. Обрабатываешь приход 1 и 3 прерываний, соответственно 1 приходит при аппаратном бряке, 3 при программном.
    Трейс реализуется установкой в контексте нужного потока флага TF (Trace Flag) и обработкой опять же прерывания int 1, которое будет вызвано после выполнения 1 инструкции. Т.к. флаг TF сбрасывается после выполнения инструкции, то в нем нужно будет снова установить в сохраненных в стеке флагах флаг TF, если нужна дальнейшая трассировка, либо оставиьт как есть, если трассировку нужно завершить.

    Что еще нужно-то?
     
  3. overwriter

    overwriter New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    6
    Great, вот именно это и интересует, установка бряков в ring0 как ее осуществить...
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну я говорю. Записываешь в нужное место байт 0xCC (int3), сохраняя старое значение. Когда управление дойдет, сгенерится прерывание 3, которое ты должен заблаговременно перехватить. Потом байт восстанавливаешь.
    Аппаратный бряк - ставишь нужным образом регистры DRx у потока. Когда линейный адрес совпадет с значением одного из адресных отладочных регистров, сгенерится прерывание 1. Его ты тоже должен обработать.
    Или ставить флаг TF в контексте нужного потока.
    Про это все я уже сказал.

    Какие конкретные вопросы будут?