我的程序集代碼有問題(在win8 64的Visual 2013中是64位的masm)。當我調用C函數(printf)時,它會從ntdll.dll中拋出異常。我做錯了什麼?我如何在64位masm上讀寫控制檯的數據?我在哪裏可以找到masm 64位的好教程?從masm調用C函數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。
64位使用不同的[調用約定](https://msdn.microsoft.com/en-us/library/ms235286.aspx)。 – Jester 2015-04-01 12:29:58
嘗試在C中編寫一個小的示例程序,然後讓編譯器生成彙編代碼,以便您可以看到調用序列。對於Visual Studio,右鍵單擊項目名稱,然後單擊屬性,C/C++,輸出文件並將組合輸出設置爲on。 – rcgldr 2015-04-01 16:35:53