WriteConsole

Тема в разделе "WASM.WIN32", создана пользователем qwe8013, 23 фев 2011.

  1. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Заметил у себя на WinXP такую вещь:
    Это работает нормально:
    Код (Text):
    1. format PE console
    2. entry start
    3. include 'win32a.inc'
    4.  
    5. section 'qweasd' readable writeable executable
    6. data import
    7. library kernel32,'kernel32.dll'
    8. include 'api\kernel32.inc'
    9. end data
    10. start:
    11. int3
    12.  
    13. invoke GetStdHandle,STD_OUTPUT_HANDLE
    14.  
    15. cld
    16. invoke WriteConsoleA,eax,qweasd,6,temp,0
    17. retn
    18.  
    19. temp dd ?
    20.  
    21. qweasd db 'qweasd'
    А вот здесь WriteConsole возвращает 0 (GetLastError=ERROR_INVALID_HANDLE) и ничего не выводит:
    Код (Text):
    1. format PE console
    2. entry start
    3. include 'win32a.inc'
    4.  
    5. section 'qweasd' readable writeable executable
    6. data import
    7. library kernel32,'kernel32.dll'
    8. include 'api\kernel32.inc'
    9. end data
    10. start:
    11. int3
    12.  
    13. invoke GetStdHandle,STD_OUTPUT_HANDLE
    14.  
    15. std
    16. invoke WriteConsoleA,eax,qweasd,6,temp,0
    17. retn
    18.  
    19. temp dd ?
    20.  
    21. qweasd db 'qweasd'
    для WriteConsoleW аналогично.
    С чем это вообще связано?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Конвенция вызова API в Windows оговаривает EFLAGS.DF. Он должен быть сброшен. Иначе начинаются чудеса, т.к. API используют инструкции 'reps XXX' без очистки этого флага.