Clerk Отнимать или не отнимать - не принципиально, это влияет только на то как в итоге принимать решение о наличии трассировки и какие задавать допуски Видимо все таки дело не в буфере и не в аффинити (можно и на однопроцессорной тачке получить выбросы), а в том, что во время контрольного измерения может произойти виндовое прерывание и результат будет будет искажен. Поэтому в любом сл. для повышения надежности нужно делать не один проход, а несколько и отсекать возможные выбросы
leo Конечно. Например и так заюзать: Код (Text): IsTracerActive proc uses ebx Call QueryInterruptPerformance mov ebx,eax Call QueryStrayPerformance mov ecx,1024 xor edx,edx mul ecx div ebx add eax,512 xor edx,edx shr eax,10 dec eax setz al movzx eax,al ret IsTracerActive endp В буфере и аффинити однозначно. Не будет. Прерывания происходят слишком часто, другое дело когда вызывается планировщик. Код ждёт в цикле изменение KeTickCount, а переменная обновляется каждую миллисекунду из KeUpdateSystemTime() которая юзается из ISR таймера.
Pentium M 1.7 ;-------------- Без трассировки 4095 1881 3839 2148 3550 2042 ;-------------- С трассировкой (OllyDbg) 3982 3982 4223 4399 3838 3814
Странные значения какието. Так как надо не умеет. Там используется стандартный медленный отладочный механизм предоставляемый сервисами. Можешь говорить что угодно и я не поверю, такое просто невозможно!
Clerk Эх... хотелось бы позлорадствовать на тему юзермодный отладчик vs ядерный отладчик. Но, к сожалению, Вы просто забываете, как OllyDebug трассирует. Она не ставит TF. По умолчанию она ставит одноразовые int3 на каждую следующую инструкцию. Кстати, как Вам такие результаты (которые без трассировки) для P4 3.4 HT? Без трассировки: 1896 1048 2014 8344 2174 1287 2357 9457 Трассировка в обход под Olly: 1980 1999 1954 2010 2026 1992 1999 1956
Уфф... Я в пустое говорю ? 1. Вывод кривой. Время под трассировкой меньше быть не может. 2. Что вы трассируете под олей, если вторая часть этого exe - трассировщик DD 3. l_inc Вы просто не знаете. Делаем: Int 2A / pushfd / pop eax / бряк и жмём в оле Ctrl+F11(Trace Into). Увидим что бит EF.TF взведён в Eax. Нормальный:
Clerk Я вообще-то о том, что трассировка под Olly, - это на самом деле не трассировка, а просто запуск программы на исполнение. К тому же по умолчанию Olly вообще не допустит передачу управления вашему VectoredHandler. Соответственно TF не будет взведён и значения получатся одинаковыми (или похожими), т.к. никакой трассировки не будет. Отсюда и результаты, полученные 2FED. Вот результаты для P4 3.4 HT для next: 1838 1054 2214 1103 1995 956 2027 943 Уж слишком колеблются значения.
l_inc Трассировка под олей - нормальная трассировка использующая TF, только минус - слишком медленно и слишком просто обнаружить. Результаты 2FED - я им не верю. Разность этих значений приближается к 10^3. Достаточно просто доказать факт трассировки.