This is the next try, it works but I am still guessing on the details of the stack shadowing.
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
includelib \pasm64\lib64\kernel32.lib
includelib \pasm64\lib64\user32.lib
MessageBoxA PROTO :QWORD,:QWORD,:QWORD,:QWORD
MessageBox equ <MessageBoxA>
ExitProcess PROTO :QWORD
call_msgbox PROTO :QWORD,:QWORD,:QWORD,:QWORD
testproc PROTO :QWORD
MB_OK equ <0>
.data
tmsg db "POASM 64 bit MessageBox",0
titl db "POASM 64 bit",0
msg2 db "Called from a POASM 64 bit procedure",0
ttl2 db "'call_msgbox' proc here",0
.code
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
align 16
start:
sub rsp, 40
call main
xor rax, rax
sub rsp, 40 ; 28h
invoke ExitProcess,rax
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
main proc
xor rax, rax
sub rsp, 40 ; 28h
invoke MessageBox,rax,ADDR tmsg,ADDR titl,MB_OK
xor rax, rax
sub rsp, 40 ; 28h
invoke call_msgbox,rax,ADDR msg2,ADDR ttl2,MB_OK
add rsp, 80
ret
main endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
align 16
call_msgbox proc hndl:QWORD,txt:QWORD,ttl:QWORD,styl:QWORD
invoke MessageBox,hndl,txt,ttl,styl
invoke testproc,16
ret
call_msgbox endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
align 16
testproc proc arg1:QWORD
mov rax, arg1
add rax, rax
ret
testproc endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end start
I have learnt that if you want anything vaguely meaningful from PODUMP you use it on the object module. I have fed this through a PODUMP formater to get vaguely readable results.
Dump of test.obj
File type: OBJ
start:
sub rsp, 28
call 0000000000000018
xor rax, rax
sub rsp, 28
mov rcx, rax
call ExitProcess
main:
xor rax, rax
sub rsp, 28
mov r9, 0
mov r8, titl
mov rdx, tmsg
mov rcx, rax
call MessageBoxA
xor rax, rax
sub rsp, 28
mov r9, 0
mov r8, ttl2
mov rdx, msg2
mov rcx, rax
call 0000000000000080
add rsp, 50
ret
call_msgbox:
call MessageBoxA
mov rcx, 10
call 00000000000000A0
ret
testproc:
mov rax, rcx
add rax, rax
ret
SUMMARY
62 .data
59 .drectve
A7 .text