Сабж Есть код mov eax, eax mov ebx, eax mov ecx, eax Возможно ли до начала выполнения каждой инструкции исполнять свой код, скажем, xor eax, eax не перестраивая оригинальный код? а просто как-то перехватывая начало новой инструкции Возможно ли это сделать, если да, то как? ЗЫ: int3 не предлагать
наверное возможно для инструкций BOUND и DIV 0/IDIV 0 если задействовать обработчики прерываний INT 4 и INTO
Финт в том, что код юзается в самоходной программе. Динамическая расшифровка. Юзать дедовским методом SEH не очень охота. q_q Думал уже об этом. Прийдется после каждой инструкции вручную бряк ставить. Да, dr-регистры вроде из р3 закрыты. Как установить хардварный бряк из программы?
Возможен. Может быть скоро я выложу на паблик реализующую это библиотеку. Принцип работы - рекомпиляция кода по первому исполнению на лету с эмуляцией некоторых инструкций. UPD: Правда использовать ее в вашем случае - это из пушки по воробьям
Ничего секретного в этом нет, но реализация гораздо сложнее, нежели к примеру самотрассировка. Еще реализация требует для своей работы с десяток мегабайт памяти.
Про самотрассировку. Возможно ли разделить свой код на Code (Text): Part1: xor eax, eax .... mov eax, 1234 ret Part2: <тут обработчик> ... ret И методом самотрассировки после каждой выполненой инструкции выполнять код Part2, не юзая автоустановку хардвардных бряков?
MagnumGT Shadow Walker. в юзермоде тебе надо поставить только один сех. В кернеле всё ещё прощще. Да и надёжнее. Это более универсальный механизм, чем всякие там прекомпиляции и т.д.
Возможно, поможет флаг EFLAGS.TF? Правда, для обработки исключения SEH использовать не удастся -- либо через отладочные события, ибо через ring0.
mix_mix только для XP и выше. 2 к отдыхает. IceStudent хм. в юзермоде страничка с кодом получает статус сторожевой, при доступе к ней срабатывает seh, далее смотришь где сработало, если не то что надо операцию повторяешь. В кернеле аналогично, страничке устанавливаем атрибут нет доступа и вешаем обработчик на #PF.
PROFi А я вот когда такими вещами делал так: 1. ставил сех 2. вызывал преднамерено багу 3. В полученном контексте правил dr`ы 4. делал продолжить работу Может сейчас уже это не работает?
работает =) так например execryptor сопротивляется отладке. Но кажется больше путей нет кроме как этот и SetThreadContext