Смерть винде

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

  1. _DEN_

    _DEN_ DEN

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


    Код (Text):
    1.  
    2. #include <stdio.h>
    3.  
    4. void main ()
    5. {
    6.   for (int i=0;i<500;i++)
    7.     printf("\t\t\b\b\b" );
    8. }


    Убиваеть XP???
     
  2. q_q

    q_q New Member

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

    У меня не убивает xpsp1. Компилировал как dosapp и как winapp.
     
  3. _DEN_

    _DEN_ DEN

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

    Я компилил VC++.NET 2003 Console App, Release.
     
  4. q_q

    q_q New Member

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

    Я компилил ...

    Intel С++ 7.0, VC++ Toolkit 2003, MS VC++ 2005 Express Beta. Console application. Не падает.
     
  5. _DEN_

    _DEN_ DEN

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

    Ну значит не зря MS свои сервиспаки выпускает :) У меня просто XP Professional.



    Запускаю прогу, сначала пропадает звук, через секунду черный экран, еще через долю секунды - синий :)
     
  6. Andrey_Kun

    Andrey_Kun New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2004
    Сообщения:
    48
    Круто, теперь можно над кемнибудь подшутить :))
     
  7. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    w2k "дышит" ровно :)
     
  8. vinnie_pooh

    vinnie_pooh New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    98
    Windows 2000 Professional, no SP: достаточно 3-х проходов цикла.
     
  9. smax

    smax New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2004
    Сообщения:
    32
    Адрес:
    .ru
    ну так и почему?



    PS

    w2kproSP4 - жива
     
  10. vinnie_pooh

    vinnie_pooh New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    98
    попробовал на асме - работает в таком виде:
    Код (Text):
    1.     .data
    2.     mess_l  dd  ?
    3.     death_mess  db  9,9,8,8,8,0
    4.     MESS_LENGTH equ $ - death_mess
    5.     LOOPS_COUNT equ 4
    6.  
    7.     .code
    8. _start:
    9.     push    STD_OUTPUT_HANDLE
    10.     call    GetStdHandle
    11.     mov ebx,eax
    12.  
    13.     mov edi,LOOPS_COUNT
    14. death_loop:
    15.     push    0
    16.     push    offset mess_l
    17.     push    MESS_LENGTH
    18.     push    offset death_mess
    19.     push    ebx    
    20.     call    WriteConsole   
    21.    
    22.     dec edi
    23.     jnz death_loop
    24.    
    25.     push    0
    26.     call    ExitProcess
    27.     end _start


    поковырямся во WriteConsole...
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    vinnie_pooh

    Зачем ноль после забоев?
     
  12. vinnie_pooh

    vinnie_pooh New Member

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



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



    Дошел до ntoskernel!WaitForMutexOject(), глубже копать нету сил, замучили перезагрузки.



    Насчет почему: \b - символ отката, видимо он декрементирует накой-то указатель в 0-м кольце, и что-то затирается. В нашем случае '\b' на один больше, чем '\t', а со строкой "\t\t\t\b\b\b" все работает нормально.



    ЗЫ. Под Айсом прога убивает винду на первой итерации.
     
  13. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    vinnie_pooh

    В третьем параметре указывается количество записываемых символов (не путать с байтами), поэтому необходимость в определении конца строки отсутствует.
     
  14. vinnie_pooh

    vinnie_pooh New Member

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

    спасибо, у меня в справочнике по WinAPI нет описания WriteConsole().



    наверное, потому что еще существует WriteConsoleW.
     
  15. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Почему убивает ХР? Потому что ХР - дерьмо плюшевое.



    ЗЫ: не воспринимайте меня всерьез - я слишком пъян.
     
  16. _DEN_

    _DEN_ DEN

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





    По-нашенски :)



    Значит WriteConsole всему причина? А она в сорцах двутоника есть? Надо глянуть... :)
     
  17. _DEN_

    _DEN_ DEN

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

    WriteConsoleOutput вызывает WriteConsoleOutputInternal.

    А там муть какая-то... Но никаких намеков на \b или \t я не увидел...



    Вот файл:



    %W2K_SRC_ROOT%\private\ntos\w32\ntcon\client\iostubs.c



    Там есть тело WriteConsoleOutputInternal.



    Вот еще:



    %W2K_SRC_ROOT%\private\ntos\w32\ntcon\client\stream.c



    Там описана WriteConsole и WriteConsoleInternal. В ней видно, что юзается несколько функций, похоже native api, Может дело в них. Их имена:



    - CsrAllocateCaptureBuffer

    - CsrCaptureMessageBuffer

    - RtlCopyMemory

    - CsrClientCallServer

    - CsrFreeCaptureBuffer



    Никакие другие функции внутри WriteConsoleInternal вроде не юзаются. Скорее всего дело в одной из них.



    Я бы и сами файлы припостил, да боюсь товарищ Беспощадный Даос обидется :)
     
  18. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Хмм.. а почему именно WriteConsole?
    Код (Text):
    1.  
    2. extern "C" int __cdecl printf(const char * format, ...)
    3. {
    4.     char szBuff[1024];
    5.     int retValue;
    6.     DWORD cbWritten;
    7.     va_list argptr;
    8.          
    9.     va_start( argptr, format );
    10.     retValue = wvsprintf( szBuff, format, argptr );
    11.     va_end( argptr );
    12.  
    13.     WriteFile(  GetStdHandle(STD_OUTPUT_HANDLE), szBuff, retValue, &cbWritten, 0 );
    14.  
    15.     return retValue;
    16. }
     
  19. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    S_T_A_S_

    Imho wvsprintf/wsprintf нельзя считать достойной заменой printf'у - не поддерживают вывод вещественных и 64-хбитных чисел. А WriteFile в отличие от WriteConsole не делится на UNICODE и ANSI версии, т.е. необходимы дополнительные усилия.
     
  20. vinnie_pooh

    vinnie_pooh New Member

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


    Если вызвать WriteFile с хендлом стандартного вывода в 1-м параметре, то мы как раз в WriteConsole и попадаем.



    вот проверка на std_out_handle:
    Код (Text):
    1. .text:77E94A7E                 mov     eax, edi
    2. .text:77E94A80                 and     eax, 10000003h
    3. .text:77E94A85                 cmp     eax, 3
    4. .text:77E94A88                 jz      short loc_77E94AD7
    этот jz перескакивает вызов NtWriteFile, а дальше:
    Код (Text):
    1. .text:77E94AD7 loc_77E94AD7:                           ; CODE XREF: WriteFile+64j
    2. .text:77E94AD7                 push    [ebp+lpReserved] ; lpReserved
    3. .text:77E94ADA                 push    ebx             ; lpNumberOfCharsWritten
    4. .text:77E94ADB                 push    [ebp+nNumberOfCharsToWrite] ; nNumberOfCharsToWrite
    5. .text:77E94ADE                 push    [ebp+lpBuffer]  ; lpBuffer
    6. .text:77E94AE1                 push    edi             ; hConsoleOutput
    7. .text:77E94AE2                 call    WriteConsoleA
    8. .text:77E94AE7                 jmp     short loc_77E94AC6
    9. .text:77E94AE7 WriteFile       endp