Заметил у себя на WinXP такую вещь: Это работает нормально: Код (Text): format PE console entry start include 'win32a.inc' section 'qweasd' readable writeable executable data import library kernel32,'kernel32.dll' include 'api\kernel32.inc' end data start: int3 invoke GetStdHandle,STD_OUTPUT_HANDLE cld invoke WriteConsoleA,eax,qweasd,6,temp,0 retn temp dd ? qweasd db 'qweasd' А вот здесь WriteConsole возвращает 0 (GetLastError=ERROR_INVALID_HANDLE) и ничего не выводит: Код (Text): format PE console entry start include 'win32a.inc' section 'qweasd' readable writeable executable data import library kernel32,'kernel32.dll' include 'api\kernel32.inc' end data start: int3 invoke GetStdHandle,STD_OUTPUT_HANDLE std invoke WriteConsoleA,eax,qweasd,6,temp,0 retn temp dd ? qweasd db 'qweasd' для WriteConsoleW аналогично. С чем это вообще связано?
Конвенция вызова API в Windows оговаривает EFLAGS.DF. Он должен быть сброшен. Иначе начинаются чудеса, т.к. API используют инструкции 'reps XXX' без очистки этого флага.