0

我创建了一个名为 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 遇到问题需要关闭。对于给您带来的不便,我们深表歉意”)。实际上,如果有人知道一本从 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 回答