Clerk Ну как сказать нельзя - если в олли вбить фолов дамп gs:[eax+c] вручную и нажать показать то дамп выведется верным. Так что тут именно отладчик причем, но GS читать он умеет (иначе как он его показывает, что он изменился, и как дамп выводит). Windbg тоже кстати генерит AV. Так что дело в механизме трейса, который возможно чекает GS.
Прчем здесь сам код? Я спрашиваю в чем надо его трейсить, чтобы получить эффект, о котором вы говорите. Ринг 3 код я могу трейсить как в оле, так и в сайсе. оли щас под рукой нет, но сайс его трейсит нормально.
medstrax1 Вы любитель читать между строк? Я вам сказал конкретно, дальше сами. Сайс меня, да и клерка я так думаю, сейчас не интересует.
Рекомендую воздержаться от определений. В противном случае прошу уточнить какие мои высказывания можно интерпретировать как "чтение между строк". По сути. Клерк ни разу не сказал об инструменте для отладки. Еще более по сути. Данный способ не имеет право на существование как антитрейс против ринг0 отладчиков
medstrax1 Ну вы не шипите как обычно, так как можно и в бан отправиться. Обсуждайте нормально. Регистр Gs не может быть считан не олей, ни виндбг, так как все манипуляции выполняются с контекстом, а не с состоянием задачи(трап-фреймами). А для конвертации контекста в трап-фрефм и обратно есть две функции - KeContextToKframes() и KeContextFromKframes(). Они обнуляют регистр Gs, если кодовый селектор отличен от дефолтного(для ntvdm, но разумеется это не учитывается достаточно). Таким образом не возможно получить значение регистра Gs из контекста, также и изменить его. Это проблема ядра, а не софта.
Clerk ну я был прав с тем что "что-то" изменяет GS в ноль. Но все равно спасибо за более развернутый ответ.
Клерк, ткни пальцем в то место, где я обсуждаю не нормально. По проблеме я уже высказался, сайс трейсит нормально. Изыскания клерка, возможно, заслуживают уважения сами по себе, но не имеют ничего общего с реальностью.
medstrax1 Реальность такова, что системный отладчик работает с контекстом, полученным после конвертации трап-фрейма в него. Тоесть например #DB - KiDispatchException() - KeContextFromKframes() - KdpTrap(Dbg) - KeContextToKframes() - EXIT_ALL. Также и локально конвертация контекста выполняется: Код (Text): KeContextToKframes: ... if (TrapFrame->SegCs == (KGDT_R3_CODE | RPL_MASK)) { TrapFrame->SegGs = 0; } else { TrapFrame->SegGs = ContextFrame->SegGs; } На счёт айса green прав.