2012-03-27 6 views
0

Ich habe ein masm-Programm namens t.exe erstellt, das eine Eingabe von cmd lesen und ausgeben soll. Ich weiß, sie können andere Methoden, es zu tun, aber ich möchte es `ReadconsoleAbsturz beim Lesen von der Konsole - masm32

` Hier verwenden machen, ist der Code:

.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 

ich versuche, es zu laufen, aber ich habe ein Microsoft-Fehler und die Programm beendet ("t.exe hat ein Problem und muss geschlossen werden. Wir entschuldigen uns für die Unannehmlichkeiten"). Eigentlich, wenn jemand ein gutes Buch einfach mit masm zu beginnen ... Ich brauche es, wie ich mit den Datentypen und bitte keine beleidigenden Kommentare kämpfe :)

+0

+0,49, nur um sich nicht mit dem 16-Bit-Mist zu beschäftigen. Jemand erkennt, dass es das 21. Jahrhundert ist. :) Sie müssen die Fehlermeldung jedoch wirklich zu Ihrem Post hinzufügen. – cHao

+0

C: \ masm32> t.exe Hallo C: \ masm32> t.exe hat ein Problem festgestellt und muss beendet werden. Wir entschuldigen uns für die Unannehmlichkeiten. –

+0

ich möchte, wenn ich t.exe Hallo Hallo Hallo wieder eingeben, aber leider habe ich den Fehler über –

Antwort

1

Ihren Code mit WinAPI Funktionen Readconsole und 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