策略:VC編譯器x64平台不支持內聯匯編,我們利用在Source文件中直接添加asm文件,直接在asm文件中寫匯編代碼,然后將asm文件編譯為OBJ文件。然后就可以在c++文件中聲明asm文件中的函數后直接使用asm文件中用匯編寫的函數。
設置步驟
先在源文件中添加一個asm文件
然后右擊文件設置屬性。設置“從生成中排出為:否”,如果為是這個asm文件就不會被編譯為obj文件。接着需要設置項類型為:“自定義生成工具”。
然后在自定義生成工具的常規設置更改為如下設置。注意因為我們在asm文件中寫的是64位匯編所以編譯命令行為ml64,如果寫的是32位匯編則是ml32(當然32位我們可以直接使用內聯匯編,沒有必要在添加一個asm單獨編譯為obj文件)
這樣我們就可以在asm文件中寫x64匯編了,可以在VS擴展商店中下載AsmDude插件這樣匯編代碼就可以高亮顯示。
也可以在github上直接下載:https://github.com/HJLebbink/asm-dude/releases
asm文件編寫匯編格式
一般匯編函數編寫的格式如下
然后在c++源文件中聲明此函數,注意函數聲明前一定要加extern “C”,防止c++編譯器為了完成函數重載對函數名稱進行修飾。
extern "C" void ProcName();
VS2019配置驅動開發環境
https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk