0

cmdから入力を読み取って出力することを想定したt.exeというmasmプログラムを作成しました。それを行う別の方法かもしれないことは知っていますが、「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から始めるのに良い本を知っていれば...私はデータ型に苦労しているのでそれが必要であり、不快なコメントはしないでください:)

4

1 に答える 1

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
于 2012-11-10T19:45:33.710 に答える