Дело не в WriteFile / WriteConsole. Возможно (?) дело вообще не в них. Поскольку у мя давно установлен SP на XP, то проверитьь я не могу, а так бы попробовал заменить библиотечный printf на код выше. Да ещё и из DOS сессии б попечатал. А так кто его знает, может быть проблема, например, в обработчике SEH.. Код (Text): _printf proc near push 0Ch push offset __sehtable$_printf call __SEH_prolog xor esi, esi cmp [ebp+8], esi jnz short loc_30 call __errno mov dword ptr [eax], 16h push esi push esi push esi push esi push esi call __invalid_parameter add esp, 14h or eax, 0FFFFFFFFh jmp short loc_8B loc_30: ; CODE XREF: _printf+11j call ___iob_func push 20h ; ' ' pop edi add eax, edi push eax push 1 call __lock_file2 pop ecx pop ecx mov [ebp-4], esi call ___iob_func add eax, edi push eax call __stbuf pop ecx mov esi, eax lea eax, [ebp+0Ch] push eax push dword ptr [ebp+8] call ___iob_func add eax, edi push eax call __output mov [ebp-1Ch], eax call ___iob_func add eax, edi push eax push esi call __ftbuf add esp, 14h or dword ptr [ebp-4], 0FFFFFFFFh call $LN6 $LN9: mov eax, [ebp-1Ch] loc_8B: ; CODE XREF: _printf+2Ej call __SEH_epilog retn _printf endp
Привет! Заглянул я тоже попробовал на вин 2к сп4 - живет а за хр без сп скажу - стояла у меня такая если щелкнуть по регулятору громкости второй раз, пока не появился первый - вывалит около сотни регуляторов - задолбаешься закрывать
S_T_A_S_ Я тоже думаю, что баг сидит где-то на низком уровне, по крайней мере в kernel-mode однозначно. Я уже высказывал догадку насчет '\b', попробую изложить ее подробнее: где-то в недрах системы код посимвольно выводит строку, наращивая указатель, скажем, на видеопамять, встретив '\b', указатель уменьшается. И если забоев было больше, чем табуляций, указатель в итоге смотрит на недоступный для записи участок, за пределы страницы, например. А вообще искать баг уже не актуально, т.к. сервис-паки его исправляют.
S_T_A_S_ У меня XPюшка без сервиспаков. Заменил, попечатал - пашет нормально, не падает. Кривая реализация printf'а? А почему тогда с сервиспаками все нормально?
krid24 > Интересно.. а мне уже начало казаться, что я где-то читал про подобный глюк, только вывод на экран производился из DOS сессии.. Есть ещё один вариант - возможно (?), ошибка в программе _DEN_а. Если это так, то такой код должен работать нормально: Код (Text): #include <stdio.h> void main () { while( printf("\t\t\b\b\b") ) ; } > В том-то и дело, что прога 3го кольца сваливать систему не должна по идее.. Какие там ЕЩЁ функции (кроме WriteFile / WriteConsole) вызывает код из libc даже думать страшно
S_T_A_S_ Всмысле? Какая у меня может быть ошибка, если суть проги, что она убивает винду, и винда у меня мрет безошибочно
_DEN_ > Ты пробовал мой вариант цикла ? Если он ведёт себя точно так же, значит, некоректное использование printf в твоём варианте не влияет на то, что сваливается виндос.