繁体   English   中英

从 masm 64 调用 C 函数

[英]Calling C function from masm 64

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

PS我从C++代码调用printData。

Windows x64 调用约定要求您传递以 RCX 开头的参数,然后根据需要传递 RDX、R8 和 R9。 在这种情况下,您可能只需要 RCX 来存储格式的地址,而 RDX 是您要打印的整数值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM