Краш при чтении из консоли - masm32

Я создал программу masm под названием t.exe, которая предполагает чтение входных данных из cmd и их вывод. Я знаю, что это могут быть другие способы сделать это, но я хочу сделать это с помощью `Readconsole

`Вот код:

.386 
.model flat, stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib

STD_INPUT_HANDLE EQU -10 

.data?
ByteAry dd 8 dup (?)
var dd ?
.code 
start: 
invoke GetStdHandle, STD_INPUT_HANDLE
invoke ReadConsole,eax,offset ByteAry,sizeof ByteAry,offset var,0
invoke StdOut,ByteAry
invoke ExitProcess,0 
end start

Я пытаюсь запустить его, но получаю сообщение об ошибке Microsoft и программа завершает работу ("t.exe обнаружил проблему и должен быть закрыт. Приносим извинения за неудобства"). На самом деле, если кто-нибудь знает хорошую книгу, чтобы начать с masm... Мне это нужно, так как я борюсь с типами данных, и, пожалуйста, не оскорбляйте комментарии :)


person mohamed essam    schedule 27.03.2012    source источник
comment
+0,49 только за то, что не заморачивался с 16-битным дерьмом. Кто-то понимает, что на дворе 21 век. :) Однако вам действительно нужно добавить сообщение об ошибке в свой пост.   -  person cHao    schedule 27.03.2012
comment
C:\masm32›t.exe привет C:\masm32› t.exe обнаружил проблему и должен быть закрыт. Приносим свои извинения за неудобства.   -  person mohamed essam    schedule 27.03.2012
comment
я хочу, когда я набираю t.exe hello, он снова выводит привет, но, к сожалению, я получил ошибку выше   -  person mohamed essam    schedule 27.03.2012
comment
И где определена эта функция StdOut?   -  person cHao    schedule 29.03.2012


Ответы (1)


Ваш код с использованием функций WinAPI ReadConsole и WriteConsole:

.586
.model flat, stdcall

option casemap:none

include windows.inc
include kernel32.inc

includeLib kernel32.lib

.data

.data?
consoleOutHandle dd ?
consoleInHandle dd ?
bytearray db 32 dup(?)
ReadWritten dd ? 

.code

start:
push STD_OUTPUT_HANDLE
call GetStdHandle

mov consoleOutHandle, eax

push STD_INPUT_HANDLE
call GetStdHandle

mov consoleInHandle, eax

push 0
push offset ReadWritten
push sizeof bytearray
push offset bytearray
push consoleInHandle
call ReadConsole

push 0
push offset ReadWritten
push sizeof bytearray
push offset bytearray
push consoleOutHandle
call WriteConsole

push 0
call ExitProcess

end start
person David    schedule 10.11.2012