Консольное приложение: считать пользовательский ввод

Тема в разделе "WASM.BEGINNERS", создана пользователем Adrax, 24 янв 2007.

  1. Adrax

    Adrax Алексей

    Публикаций:
    0
    Регистрация:
    14 окт 2006
    Сообщения:
    135
    Адрес:
    г. Курск
    Уважаемые программисты! Пытаюсь создать консольное Win32-приложение в FASM, считывающее число и выдающее его

    факториал. Столкнулся с проблемой: при вызове ReadConsole или ReadFile в буфер заносится совсем не

    пользовательский ввод!
    Поясню на примере:
    console.exe
    Код (Text):
    1. format PE console
    2. include 'win32axp.inc'
    3. .data
    4. ns dd ?
    5. hout dd ?
    6. buffer db 10 dup (?)
    7. .code
    8. fuck:
    9. invoke GetStdHandle,STD_OUTPUT_HANDLE
    10. mov [hout],eax
    11. invoke GetStdHandle,STD_INPUT_HANDLE
    12. invoke ReadConsole,eax,buffer,10,ns,NULL
    13. invoke WriteConsole,[hout],buffer,10,ns,NULL
    14. invoke ExitProcess,0
    15. .end fuck
    Эта программка нормально считывает строку и выводит её вновь, но есть одна странность: прогоняя её под

    отладчиком, увидел что в buffer попадает отнюдь не введённая строка (т.е. ввожу, например 555, а в buffer

    c.o.n., т.е. первые буквы имени программы, да ещё и в юникод!!). В данном примере всё почему-то работает

    (т.е. ввожу 555, в buffer попадает c.o.n., а на экран выводит всё же 555), но беру чуть посложнее (например,

    прикручиваю самописную StrToInt, а она не пашет, потому что в buffer не цифры; lstrlen стабильно выдаёт

    длину строки buffer 1 символ) - и всё наворачивается!!
    Как считать из консоли именно пользовательский ввод? И как сделать это в ANSI, а не Unicode? Please, help!
     
  2. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    Adrax
    Наверное, это из-за названия стартовой метки.
     
  3. Adrax

    Adrax Алексей

    Публикаций:
    0
    Регистрация:
    14 окт 2006
    Сообщения:
    135
    Адрес:
    г. Курск
    2 koderr
    Юморист...
    Мне-то не смешно: ковырялся, блин, в исходниках одного калькулятора, уразумел принцип действия StrToInt и даже StrToFloat, думал - щас смастерю консольную приблуду, чтоб поскорее алгоритм проверить - ан нет: даже ввод считать не могу!! Что за наказание?!
     
  4. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    Adrax
    На wasm статья есть про "Win32ASM: Консольный ввод, томограф IDA и скальпель SoftICE".