从控制台读取时崩溃 - masm32

时间:2012-03-27 19:05:06

标签: assembly masm masm32

我创建了一个名为t.exe的masm程序,它假定从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遇到问题需要关闭。很抱歉给您带来不便&# 34)。 实际上,如果有人知道一本好书从masm开始...我需要它,因为我努力与数据类型,请不要冒犯评论:)

1 个答案:

答案 0 :(得分: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