我需要在Windows x64程序集中使用以下代码:
a)以非阻塞方式从用户键盘(stdin)读取数据。
b)检查是否有数据的方法所以我知道我是否应该调用readFile或跳过此步骤
c)修复我到目前为止所做的实施
到目前为止,我尝试了PeekNamedPipe功能,但它似乎无法正常工作。这是我到目前为止的代码:
mov rcx, dword -10
sub rsp, 28h
call GetStdHandle
add rsp, 28h
mov [std_in_handle], rax
sub rsp, 30h
mov rcx, qword [std_in_handle]
mov rdx, qword 0
mov r8d, dword 0
mov r9, qword 0
mov qword [rsp+0x20], bytes_available
mov qword [rsp+0x28], 0
call PeekNamedPipe
add rsp, 30h
cmp dword [bytes_available], dword 0
je .skip_reading_input
sub rsp, 28h
mov rcx, qword [std_in_handle]
mov rdx, qword input_char
mov r8d, dword 1
mov r9, qword BytesRead
mov qword [rsp+0x20], 0
call ReadFile
add rsp, 28h
.skip_reading_input
即使我在键盘上键入内容,bytes_available中的值也始终为0,因此总是跳过readfile。
答案 0 :(得分:0)
我设法以某种方式使用此函数解决我的特定问题
extern GetAsyncKeyState
它具有在按下键时返回给定值的选项或者自上次调用函数后按下它时的选项 - 所以我在程序开始时调用此函数一次,然后检查是否从那时起调用它。但是在使用这种方法时存在许多问题,所以我会检查其他人建议的那些,并且可能会发布更好的解决方案。