x64匯編第四講,c / C++中調用x64匯編


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文件中包含這個頭文件即可.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM