2012-03-27 9 views
0

cmdから入力を読み込んで出力すると思われるt.exeというmasmプログラムを作成しました。 私は、彼らはそれを行うには別の方法であるとしてもよい知っているが、私はそれが `ここでは、コードである` Readconsoleコンソールから読み込んだときにクラッシュする - masm32

を使用して作りたい:

.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で開始するには良い本を知っていれば、私はデータ型に苦労として は、実は...私はそれを必要とWinAPIのを使用してくださいありません不快なコメント:)

+0

+0.49は、16ビットのごみを気にしないためです。誰かがそれが21世紀であることを認識しています。 :)本当にあなたの投稿にエラーメッセージを追加する必要があります。 – cHao

+0

C:¥masm32> t.exe hello C:¥masm32> t.exeに問題が発生したため、終了する必要があります。ご不便をおかけしてしまい申し訳ございません。 –

+0

私はt.exeと入力するとhelloを返します もう一度helloを出力しますが、unfortuanlly上にエラーがあります –

答えて

1

あなたのコードは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 
関連する問題