我又遇到了同样的问题。所以,这次我创建了一个小函数,它将在控制台上显示一些文本。您将 2 个参数压入堆栈,调用函数,查看文本并返回。这是代码:
start:
push dword MyText ; Pointer to the variable from the .data section
push dword 26 ; Number of characters to write
call ShowText
ret
ShowText:
push ebp
mov ebp, esp
push 0
push WrittenChars ; Pointer to the variable from the .bss section
push dword [ebp + 8] ; Number of characters to write
push dword [ebp + 12] ; MyText
push dword [StdHandle] ; Value of StdHandle, from the .bss section
call WriteConsoleA
pop ebp
ret
[section .data]
MyText db 'Abcdefghijklmnopqrstuvxzw', 0Ah
因此,正确的值被推送和检索WriteConsoleA
,文本正确显示,但我仍然收到Access Violation Error,所以在显示消息后看起来 ESP 是错误的。我以为WriteConsoleA
会清除它的论点,我不知道会发生什么。