Прикольный баг Olly с FPU

Тема в разделе "WASM.RESEARCH", создана пользователем Broken Sword, 21 фев 2005.

  1. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    Отлаживаю два процесса - два окна OllyDbg. У одного процесса -



    ST=1.4426950408889634070

    ST(1)=2.4450000000000000000



    у другого -



    ST=1.4426950408889634070

    ST(1)=2.4450000000000000000



    (т.е. это один и тот же процесс в двух сессиях Olly)



    Команда FMULP ST(1),ST



    Результат в первой сессии:

    ST=3.5273893749735155310



    Результат во второй:

    ST=3.5273893749735156790



    Ваши комментарии?
     
  2. jekyll

    jekyll New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2003
    Сообщения:
    92
    Адрес:
    Russia
    Результат почти одинаковый.

    Наверно с округлением что-то.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Мои коментарии таковы : на скока я понимаю сопроцессор для умножения (деления) использует стандартные процедуры такие как например умножение в дополнительном коде и со сдигом множимого влево ( и тп) .. а ведь все эти операции выполняются в двоичнах кодах и при сложении и сдвиге происходят (нередко) неточности (округления). из за большого количества разрядов, какой-то разряд при сдвиге теряеться из за того, что его нельзя вместить в разрядную сетку .. и эта единица отбрасывается ... вроде так
     
  4. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    хм, получается интеловские процы не подходят для сверхточных вычислений? (интересно, на какие мирские процессы может оказать влияние неточность в 15 знаке)
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Ну если будут расчитывать что-нибудь вроде гигантского ускорителя...

    Второе рождение вселенной или он просто сломается.
     
  6. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336


    но не обязательно использовать fpu - можно все реализовать самому. вот только нужно ли?
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > хм, получается интеловские процы не подходят для сверхточных вычислений?



    Может тогда AMD'шные подходят :derisive:
     
  8. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    А в cwr значения округления устанавливаются перед этим? Или не контролируется? Видимо, другой процесс изменяет значение округления - отсюда и разница.
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Похоже, что так и есть (значение FCW было бы хорошо привести здесь)

    но как чужой поток может изменить значение FPU Control Word?

    При создании потока (у меня) обычно там 0x027F находится (хотя это значение никто не гарантирует)
     
  10. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    вы имеете ввиду то что olly обзывает EFL ? Нет, он и там и там равен 246, а после FMULP не меняется. Интересно другое - где бы FMULP не исполнился первым - результат в каждому из двух потоков не меняется, т.е. никакого влияния один на другой не оказывает... мистика какая-то.
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  12. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Нет, это не EFL - в окне регистров, под st(0)-st(7) расположены регистры FST (FPU status word) и FCW (FPU control word) - по содержимому FCW изменяется тип округления (12 и 13 биты FCW). Значения FCW могут отличаться (если не контролируются явно перед выполнением)
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Дело не столько в округлении (RC), сколько в ограниченной точности (PC).

    FCW = 02xxh соответствует RC = 00b = Near и PC = 10b = double precision = 53 бита = 15-16 десятичных знаков. Вот результаты и различаются в 17-м знаке (хотя тоже вопрос - почему). Если изменить PC = 11b = 3h = extended = 64 бит = 19-20 десятичных знаков, то получим более точный и стабильный результат = 3.5273893749735155300



    (Для проверки, можно прямо в Оле перед FMULP изменить FCW -> Prec на 64-bit accuracy)
     
  14. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    S_T_A_S_

    > "При создании потока (у меня) обычно там 0x027F находится (хотя это значение никто не гарантирует)"



    При старте проги (у меня) обычно тоже FCW = 027Fh. Но, если принудительно инициализировать FPU, используя FINIT, то устанавливается FCW = 037Fh, т.е. extended 64-bit precision. Так-что, может быть FINIT'а и не хватает. Или где-то в проге сидит custom FLDCW.
     
  15. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    чтоб хоть как-то соответствовать названию топика - пробовал ли кто-то нажимать на линк для закачки чего-нить при установленном Download Master-е и отлаживаемом в этот момент любом процессе в OllyDbg? Кстати, DM - не единственная прога, которая сильно не дружит с olly в моменты отладки. Сейчас не упомню, но были точно.
     
  16. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Гы, при установленном xprot попытка запустить Olly вообще вызвала ребут, причем жестокий такой ребут :derisive:
     
  17. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    а DivX Pro не запустился в Olly (и в SoftICE тоже)