我目前正在從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