0

我最近想出了如何在汇编中写入标准输出,但现在无法从标准输入读取,并将我读回的内容输出到标准输出。这是我到目前为止的代码:

.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用 a替换number它会显示一个空间number时间),这导致了我的问题(当我输入我的输入并点击返回时,它根本不显示任何内容)。

我已经为此摸索了很长一段时间,并希望得到任何帮助。(我这样做只是为了了解这不是家庭作业)。

我的问题本质上是我做错了什么?

4

1 回答 1

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
于 2012-10-04T14:47:53.290 回答