Начальные условия: 1) Программа состоит из двух частей: приложения ring3 и драйвера ядра. 2) Последний использует регистры отладки и перехватывает прерывание int 1 до их использования, и до загрузки программы ring3. 3) При расшифровке участка программы ring3 используется TSC. Какие существуют соображения, каким образом возможна интерактивая отладка такой программы.
По факту перехвата int1 перехватывай его сам, и юзай на здоровье обычную отладку. По поводу TSC - запуская на ЛЮБОЙ АМД машине - можно перезаписывать TSC полностью (в отличие от Интела). Типа, пришел хук на int1 к тебе, сохранил TIME_STAMP_COUNTER контент, осмотрел что надо, и перед передачей управления на int1 обработчик супостата перезаписал прежним значением TSC. Запись в TSC - через wrmsr из ядра, или через ZwSystemDebugControl(SysDbgMsrWrite) из юзера, MSR_TSC = 0x10
eugene_ Хук на int 1 установить невозможно, поскольку последовательность действий такая: 1. Допустим отлаживаемое приложение пытается ихменить адрес обработчика int 1, а у нас на этом адресе стоит хук. 2. Процессор ганенирует исключение отладки и пытается прочитать адрес по которому необходимо передать управление, но опять возникает исключение (поскольку хук не кто не отменял и даже флаг RF не поможет) и т.д. в итоге процессор зацикливается и зависает.
хукай SwapContext - не ошибешься При каждом переключении контекстов смотри адрес int1 из IDT Если изменился - вставляй свой и делай после своего кода для отладки джамп на обработчик супостата - чтобы не заподозрил ничего лишнего.
eugene_ SwapContext - это функция или область памяти? И второй момент - зависимость от операционной системы т.е. до этого момента мой отладчик работал как в DOS так и linux так и в windows, а в таком случае даже новая операционка предусматривает его переработку под себя. Я все-таки больше склоняюсь к возможностям процессора, чем возможностей OS.
SwapContext - это наиболее часто используемая в Виндовском шедуллере функция, которая вызывается всякий раз, когда происходит переключение потоков
eugene_ Что ж спасибо за конструктивный ответ. Попробую. Что касается TSC, то тут действительно проблема (у меня Intel).