从masm 64调用C函数

时间:2015-04-01 12:28:45

标签: c assembly x86-64 masm

我的汇编代码有问题(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。

1 个答案:

答案 0 :(得分:2)

64位调用约定(https://msdn.microsoft.com/en-us/library/ms235286.aspx)要求您从RCX开始传递参数,如果需要则传递RDX,R8和R9。在这种情况下,您可能只需要RCX来存储格式的地址,并且RDX是您要打印的整数值。