x64匯編第四講,c / C++中調用x64匯編
一丶簡介
1.說明
在x86下,我們的C/C++調用匯編可以直接 __asm進行內聯.
或者也可以直接靜態鏈接
具體詳情可以參考以前博客:
https://www.cnblogs.com/iBinary/p/7555503.html
其實在我們x64下跟x32調用一樣.只不過不支持內聯匯編了.還是支持你編譯成obj的方式進行調用.你聲明一下就可以使用了.
現在我們用新的方法.直接編寫一個 x64ASM文件即可.
二丶C/C++調用 asm64.asm函數.
1.配置asm參與生成
首先我們創建一個C/C++空項目.使用VS創建.這個應該很簡單.不在截圖了.
然后創建一個.c 或者.cpp文件.里面先按照征程寫法,編寫你的程序.
如下:
可以正常執行
然后我們添加一個.asm文件的后綴名. 這個文件跟添加.cpp文件一樣.自己更改為.asm即可.
如下:
最重要的一步
你有這個文件,但是不能參加到項目的生成中來.所以你需要改一下 這個文件的屬性.讓其可以參與項目生成,且編譯的時候編譯成匯編格式.
如下:
從項目中生成 選擇否代表你這個文件要參與生成.
第二個就是選擇工具,選擇自定義即可.因為我設置過了.所以左側有自定義
生成工具
設置命令行編譯.以及輸出
如下:
命令行: ** ml64 /Fo $(IntDir)%(fileName).obj /c %(fileName).asm
**
輸出: **$(IntDir)%(fileName).obj
**
此時我們asm就可以參與生成了.
2.給Asm文件添加函數代碼
此時文件可以生成了.你就可以編寫x64代碼了.如下
.data
.const
.code
addNumber proc
mov rax,rcx
add rax,rdx
ret
addNumber endp
end
3.C/C++調用asm的函數
上面我們寫了 asm函數.我們C/C++調用的時候聲明一下即可使用
如上面代碼我們操作了 rcx,rdx 說明我們的參數有兩個.
如下:
如果你的工程比較大.那么你可以為你的64asm匯編文件添加一個頭文件
頭文件中進行函數聲明. 以 C方式導出.
你的CPP文件中包含這個頭文件即可.