我最近想出了如何在汇编中写入stdout,但现在无法从stdin读取,并将我读回的内容输出到stdout。这是我到目前为止的代码:
.386
.model flat, stdcall
WriteFile PROTO STDCALL:DWORD, :PTR, :DWORD, :PTR DWORD, :PTR OVERLAPPED
ReadFile PROTO STDCALL:DWORD, :PTR, :DWORD, :PTR DWORD, :PTR OVERLAPPED
GetStdHandle PROTO STDCALL:DWORD
.data
.data?
input DW ?
input_size DD ?
read DD ?
.code
main:
INVOKE GetStdHandle, -10
INVOKE ReadFile, eax, OFFSET input, input_size, read, 0
INVOKE GetStdHandle, -11
INVOKE WriteFile, eax, OFFSET input, OFFSET input_size, read, 0
RET
END main
我很确定我读错了。我非常确定input_size
和read
的行为不符合预期(如果我将input_size
替换为number
,则会显示空格number
次),这是导致我的问题(当我输入我的输入并点击返回时它根本不显示任何内容)。
我已经在这方面摸索了很长一段时间,并感谢任何帮助。 (我这样做只是为了了解这不是作业)。
我的问题本质上是我做错了什么?
答案 0 :(得分:2)
您只为输入缓冲区分配两个字节:
input DW ?
您的输入大小为零,导致ReadFile读取最多0个字节:
input_size DD ?
nNumberOfBytesToRead应该作为值而不是指针传递。并且您希望写入在Readfile中输入的字节数:
INVOKE WriteFile, eax, OFFSET input, OFFSET input_size, read, 0
INVOKE WriteFile, eax, OFFSET input, read, read, 0