我的汇编代码有问题(win8 64上的Visual 2013中的64位masm)。当我调用C函数(printf)时,它会从ntdll.dll中抛出异常。我做错了什么?如何在64位masm中从控制台读取和写入数据?在哪里可以找到masm 64位的好教程?
extrn printf : proc
.data
format byte "Arg1: %d", 10, 0
.code
printData proc
mov rbx, 100
push rbx
lea rax, format; format address
push rax
call printf; throw unhandled exception ntdll.dll - Access violation reading location 0xFFFFFFFFFFFFFFFF.
add rsp, 16 ;2* 64bit value
ret
printData endp
end
P.S我正在用C ++代码调用printData。
答案 0 :(得分:2)
64位调用约定(https://msdn.microsoft.com/en-us/library/ms235286.aspx)要求您从RCX开始传递参数,如果需要则传递RDX,R8和R9。在这种情况下,您可能只需要RCX来存储格式的地址,并且RDX是您要打印的整数值。