Смерть винде

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 16 сен 2004.

  1. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Дело не в WriteFile / WriteConsole.

    Возможно (?) дело вообще не в них.

    Поскольку у мя давно установлен SP на XP, то проверитьь я не могу, а так бы попробовал заменить библиотечный printf на код выше. Да ещё и из DOS сессии б попечатал.

    А так кто его знает, может быть проблема, например, в обработчике SEH..


    Код (Text):
    1. _printf         proc near
    2.                 push    0Ch
    3.                 push    offset __sehtable$_printf
    4.                 call    __SEH_prolog
    5.                 xor     esi, esi
    6.                 cmp     [ebp+8], esi
    7.                 jnz     short loc_30
    8.                 call    __errno
    9.                 mov     dword ptr [eax], 16h
    10.                 push    esi
    11.                 push    esi
    12.                 push    esi
    13.                 push    esi
    14.                 push    esi
    15.                 call    __invalid_parameter
    16.                 add     esp, 14h
    17.                 or      eax, 0FFFFFFFFh
    18.                 jmp     short loc_8B
    19.  
    20. loc_30:                                 ; CODE XREF: _printf+11j
    21.                 call    ___iob_func
    22.                 push    20h ; ' '
    23.                 pop     edi
    24.                 add     eax, edi
    25.                 push    eax
    26.                 push    1
    27.                 call    __lock_file2
    28.                 pop     ecx
    29.                 pop     ecx
    30.                 mov     [ebp-4], esi
    31.                 call    ___iob_func
    32.                 add     eax, edi
    33.                 push    eax
    34.                 call    __stbuf
    35.                 pop     ecx
    36.                 mov     esi, eax
    37.                 lea     eax, [ebp+0Ch]
    38.                 push    eax
    39.                 push    dword ptr [ebp+8]
    40.                 call    ___iob_func
    41.                 add     eax, edi
    42.                 push    eax
    43.                 call    __output
    44.                 mov     [ebp-1Ch], eax
    45.                 call    ___iob_func
    46.                 add     eax, edi
    47.                 push    eax
    48.                 push    esi
    49.                 call    __ftbuf
    50.                 add     esp, 14h
    51.                 or      dword ptr [ebp-4], 0FFFFFFFFh
    52.                 call    $LN6
    53.  
    54. $LN9:
    55.                 mov     eax, [ebp-1Ch]
    56.  
    57. loc_8B:                                 ; CODE XREF: _printf+2Ej
    58.                 call    __SEH_epilog
    59.                 retn
    60. _printf         endp                                                              
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    Привет! Заглянул ;)

    я тоже попробовал на вин 2к сп4 - живет

    а за хр без сп скажу - стояла у меня такая ;)

    если щелкнуть по регулятору громкости второй раз, пока не появился первый - вывалит около сотни регуляторов - задолбаешься закрывать ;)
     
  3. vinnie_pooh

    vinnie_pooh New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    98
    S_T_A_S_



    Я тоже думаю, что баг сидит где-то на низком уровне, по крайней мере в kernel-mode однозначно. Я уже высказывал догадку насчет '\b', попробую изложить ее подробнее: где-то в недрах системы код посимвольно выводит строку, наращивая указатель, скажем, на видеопамять, встретив '\b', указатель уменьшается. И если забоев было больше, чем табуляций, указатель в итоге смотрит на недоступный для записи участок, за пределы страницы, например.

    А вообще искать баг уже не актуально, т.к. сервис-паки его исправляют.
     
  4. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    S_T_A_S_





    У меня XPюшка без сервиспаков. Заменил, попечатал - пашет нормально, не падает. Кривая реализация printf'а? А почему тогда с сервиспаками все нормально?
     
  5. S_T_A_S_

    S_T_A_S_ New Member

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




    Интересно.. а мне уже начало казаться, что я где-то читал про подобный глюк, только вывод на экран производился из DOS сессии..



    Есть ещё один вариант - возможно (?), ошибка в программе _DEN_а.

    Если это так, то такой код должен работать нормально:
    Код (Text):
    1. #include <stdio.h>
    2.  
    3. void main ()
    4. {
    5.     while( printf("\t\t\b\b\b") ) ;
    6. }




    >




    В том-то и дело, что прога 3го кольца сваливать систему не должна по идее..

    Какие там ЕЩЁ функции (кроме WriteFile / WriteConsole) вызывает код из libc даже думать страшно :)
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    S_T_A_S_

    Всмысле? Какая у меня может быть ошибка, если суть проги, что она убивает винду, и винда у меня мрет безошибочно
     
  7. S_T_A_S_

    S_T_A_S_ New Member

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




    Ты пробовал мой вариант цикла ?

    Если он ведёт себя точно так же, значит, некоректное использование printf в твоём варианте не влияет на то, что сваливается виндос.





     
  8. vinnie_pooh

    vinnie_pooh New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    98




    Я пробовал, результат тот же.







    :=)