我知道前四个参数在寄存器中(RCX
, RDX
, R8
, R9
),并且其他参数被压入堆栈。
问题:
如何将参数压入堆栈?我尝试使用 (push 0) 但它不起作用?
代码( MASM64 )
extrn ExitProcess: PROC
extrn MessageBoxExA: PROC
.data
caption db '64-bit hello!', 0
message db 'Hello World!', 0
.code
Start PROC
sub rsp, 38h
mov rcx, 0 ; hWnd = HWND_DESKTOP
lea rdx, message ; LPCSTR lpText
lea r8, caption ; LPCSTR lpCaption
mov r9d, 0 ; uType = MB_OK
push 0 ; wLanguageId
call MessageBoxExA
mov ecx, eax
add rsp, 38h
call ExitProcess
Start ENDP
End
我知道这一点MessageBox
并MessageBoxEx
以相同的方式工作,但我尝试使用它,MessageBoxEx
因为它需要传递一个参数(用于学习目的)。
我知道我问过类似的问题,但它与 vb.net 更相关,而这不是。