在.code之外调用程序集函数



我尝试运行下面的简单代码:

extrn MessageBoxA: PROC
extrn ExitProcess: PROC
.data
titles db 'Win64', 0
msg db 'Hello World!', 0
.code
main proc
sub rsp, 28h      ; 32 byte for 4 arguments, 8 byte for 'call' it self
mov rcx, 0        ; hWnd = HWND_DESKTOP
lea rdx, msg      ; LPCSTR lpText
lea r8,  titles   ; LPCSTR lpCaption
mov r9d, 0        ; uType = MB_OK
call MessageBoxA
mov ecx, eax
add rsp, 28h
main endp
End

当我把它移到一个函数时,代码不再工作:

extrn MessageBoxA: PROC
extrn ExitProcess: PROC
.data
titles db 'Win64', 0
msg db 'Hello World!', 0
msgbox_ready:
sub rsp, 28h      ; 32 byte for 4 arguments, 8 byte for 'call' it self
mov rcx, 0        ; hWnd = HWND_DESKTOP
lea rdx, msg      ; LPCSTR lpText
lea r8,  titles   ; LPCSTR lpCaption
mov r9d, 0        ; uType = MB_OK
call MessageBoxA
mov ecx, eax
add rsp, 28h
.code
main proc
call msgbox_ready
main endp
End

如果我将msgbox_ready的内容移动到函数main,似乎可以。问题出在哪里?会不会是因为它在.code段之外?

我用jmp msgbox_ready而不是call msgbox_ready解决了这个问题,函数运行良好。读取程序集';呼叫';vs';jmp';

最新更新