我目前正在从NASM编译一个简单的I/O的控制台应用程序,但即使它编译和链接,当我运行它崩溃。这里是代码:NASM ReadConsoleInput
STD_OUTPUT_HANDLE equ -11
STD_INPUT_HANDLE equ -10
NULL equ 0
global start
extern ExitProcess, GetStdHandle, WriteConsoleA, ReadConsoleInputA
section .data
msg db "Hello World!", 13, 10, 0
msg.len equ $ - msg
consoleInHandle dd 1
section .bss
buffer resd 2
buffer2 resb 32
section .text
start:
push STD_OUTPUT_HANDLE
call GetStdHandle
push NULL
push buffer
push msg.len
push msg
push eax
call WriteConsoleA
read:
push STD_INPUT_HANDLE
call GetStdHandle
mov [consoleInHandle],eax
push NULL
push 1
push buffer2
push dword [consoleInHandle]
call ReadConsoleInputA
exit:
push NULL
call ExitProcess
任何线索?我的方式在运行64和Windows 10的机器,我使用NASM汇编和GoLink用于连接
这是一个64位程序?如果是这样,[你没有遵循amd64调用约定](https://msdn.microsoft.com/en-us/library/ms235286.aspx)。 ([详细信息](https://blogs.msdn.microsoft.com/oldnewthing/20040114-00/?p=41053/)) – andlabs
我猜,虽然使用的是64位Windows的意图是目标32位可执行文件与此? –
的[ReadConsoleInput该* lpNumberOfEventsRead *参数(https://msdn.microsoft.com/en-us/library/windows/desktop/ms684961.aspx)是不可选的。你必须传递一个有效的指针。 – IInspectable