在VS2015中編寫x86匯編


 參考教程:

作者:上下求索

VS2015,C嵌套匯編 & C,匯編相互調用

http://ylqhust.github.io/blog/2016/04/17/vs-clanguage-asm-combine/

 

最近因為工作需要開始學習x86匯編,目的是使用c++調用匯編編寫的代碼,在網上找到的資料要么不對,要么是純匯編編寫的程序。這里分享一個很不錯的在VS2015中調用x86匯編的地址,方便學習使用。 

在實際實踐中,發現該教程的有些地方並不能正常運行,需要根據實際情況稍微變動。

1、在新建控制台空項目后,添加.asm文件,並完善匯編,教程中提到是需要在命令行中先使用 ml /c /coff sum.asm 指令生成對應的匯編obj文件,然后把該文件添加到項目中,我出現的情況是,如果把obj文件加入到項目中,在編譯階段會報如下錯誤:

sum.obj : error LNK2005: _sumab already defined in sum.obj

出現這種情況的原因就在於項目中同時存在sum.asm和sum.obj,意思就是說編譯器會自動編譯匯編源代碼,無需手動編譯,所以上面那一步操作實際可以略去。

2、第二個問題是在匯編子程序中調用c代碼。

教程給出的c代碼如下:

extern int __stdcall sum3(int a, int b) {
    //此函數給匯編子程序調用
    return a + b;
}

同樣在編譯階段會出現如下錯誤信息:

asmfile.obj : error LNK2019: unresolved external symbol _sum3@8 referenced in function _sum

需要對c代碼做如下修改

 

extern "C" {
int __stdcall sum3(int a, int b) {
    //此函數給匯編子程序調用
    return a + b;
}
}

這樣,便可以順利通過編譯,進而運行項目文件。

 
       


免責聲明!

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



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