OllyDbg и rdtsc

Тема в разделе "WASM.ZEN", создана пользователем t00x, 15 июл 2007.

  1. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    rdtsc вернул в eax такой результат
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а в чем собсна вопрос?
     
  3. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    после выполнения кода на картинке разница между двумя rtdsc слишком большая. разве нет
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    пошагово выполняли? ;)
     
  5. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    очевидно, иначе был бы 0
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    по F9. сейчас перепроверил, получил 66C2 -72E4 :dntknw:(((
     
  7. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Неправильно проверять только eax, нужно еще и edx, а то можно получить и отрицательное число.
     
  8. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    edx = 0
    O_o
     
  9. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    t00x
    1) Так, rdtsc, дает число тиков в edx:eax, правильно? Если в eax после первой rdtsc, к примеру 0xffffffff, а в edx - smth, то что получится в edx в следующий момент? Если не smth+1, то машина либо супербыстрая, либо не работает. Оба варианта невозможны, следовательно в edx будет smth+1.
    2) Разницу правильно считать так:

    sub eax, [saved_eax]
    sBb edx, [saved_edx]
     
  10. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    dr_dred
    я думал, что в след. момент в edx будет edx+1, а в eax - 0. Разве нет?
     
  11. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    сегодня 4Bxx - 54xx
    может драйвер какой отлавливает rdtsc, или cpuid
     
  12. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    проверил на linux x86_64.
    Код (Text):
    1.     cpuid           ;------------
    2.     rdtsc
    3.     mov [time], rax
    4.     mov [time0], rdx
    5.     ;code
    6.     ;code
    7.     clc
    8.     rdtsc
    9.     sub rax, [time]
    10.     sub rdx, [time0]
    11.  
    12.     int 3
    13.     sub eax, 0      ;------------
    14.  
    15.     xor edi,edi     ; exit code 0
    16.     mov eax,60      ; sys_exit
    17.     syscall
    после int 3 dbg выдал результат:
    rdtsc возвращает значение в edx:eax даже в 64 режиме;
    $rax потому что нет регистра $eax

    аппаратный глюк?

    P.S. процессор Intel P4 506 2.66
    посмотрите плз, у кого такой же
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    t00x
    Нет, т.к. по всей видимости ты пытаешься делать измерения прямо на старте проги, когда страница секции данных еще не инициализирована. См. Еще один вариант IsDebuggerPresent по RDTSC
     
  14. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    leo
    секция данных инициализирована (Olly), оттуда предварительно читаю данные.
    по ссылке после запуска IsDbg и IsDbg2 получил похожие результаты.
    возможно такие задержки из-за отладки.
    на PIII + Delphi у меня получалось ровно 11 тиков, а здесь за 25000 бывает, ещё и плавает ~8000.

    P.S. разобрался. получается 100 тиков :)
    Спасибо.