Экзотика при отладке программ или debug from ring0

Тема в разделе "WASM.RESEARCH", создана пользователем PROFi, 24 май 2006.

  1. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Начальные условия:

    1) Программа состоит из двух частей: приложения ring3 и драйвера ядра.

    2) Последний использует регистры отладки и перехватывает прерывание int 1 до их использования, и до загрузки программы ring3.

    3) При расшифровке участка программы ring3 используется TSC.

    Какие существуют соображения, каким образом возможна интерактивая отладка такой программы.
     
  2. eugene_

    eugene_ New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2005
    Сообщения:
    93
    Адрес:
    Russia
    По факту перехвата int1 перехватывай его сам, и юзай на здоровье обычную отладку. По поводу TSC - запуская на ЛЮБОЙ АМД машине - можно перезаписывать TSC полностью (в отличие от Интела). Типа, пришел хук на int1 к тебе, сохранил TIME_STAMP_COUNTER контент, осмотрел что надо, и перед передачей управления на int1 обработчик супостата перезаписал прежним значением TSC.

    Запись в TSC - через wrmsr из ядра, или через ZwSystemDebugControl(SysDbgMsrWrite) из юзера, MSR_TSC = 0x10
     
  3. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    eugene_

    Хук на int 1 установить невозможно, поскольку последовательность действий такая:

    1. Допустим отлаживаемое приложение пытается ихменить адрес обработчика int 1, а у нас на этом адресе стоит хук.

    2. Процессор ганенирует исключение отладки и пытается прочитать адрес по которому необходимо передать управление, но опять возникает исключение (поскольку хук не кто не отменял и даже флаг RF не поможет) и т.д. в итоге процессор зацикливается и зависает.
     
  4. eugene_

    eugene_ New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2005
    Сообщения:
    93
    Адрес:
    Russia
    хукай SwapContext - не ошибешься

    При каждом переключении контекстов смотри адрес int1 из IDT

    Если изменился - вставляй свой и делай после своего кода для отладки джамп на обработчик супостата - чтобы не заподозрил :) ничего лишнего.
     
  5. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    eugene_



    SwapContext - это функция или область памяти? И второй момент - зависимость от операционной системы т.е. до этого момента мой отладчик работал как в DOS так и linux так и в windows, а в таком случае даже новая операционка предусматривает его переработку под себя. Я все-таки больше склоняюсь к возможностям процессора, чем возможностей OS.
     
  6. eugene_

    eugene_ New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2005
    Сообщения:
    93
    Адрес:
    Russia
    SwapContext - это наиболее часто используемая в Виндовском шедуллере функция, которая вызывается всякий раз, когда происходит переключение потоков
     
  7. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    eugene_



    Что ж спасибо за конструктивный ответ. Попробую. Что касается TSC, то тут действительно проблема (у меня Intel).