c 中呼叫64位彙編函式

2021-06-13 15:12:30 字數 749 閱讀 2821

眾所周知從vs2005開始微軟就不支援在c++中內聯彙編了。會出現如下的錯誤

如果我們要在程式中內聯彙編的話就要把彙編單獨編譯成乙個檔案,然後自定義規則生成obj,在鏈結的時候新增進去。

網上有32位的彙編與c++相互呼叫的例子,今天說的是x64的,其實也就是有一點差別。

步驟如下:

1.編寫乙個asm檔案

extern        messageboxa:proc

.data

text     db 'hello x64!', 0

.code

mymessage proc 

xor r9,r9

lea r8, caption

lea rdx, text

xor rcx,rcx

call messageboxa

ret 

mymessage endp

end要注意x64彙編與x32的不同,尤其是引數的傳遞,這方面可以參考論壇裡面的x64教程。

2.用vs2008建立乙個專案,然後把asm新增進去。

3.修改自定義規則如下。

4.編寫呼叫函式

#include "stdafx.h"

#include 

#include 

extern "c" int __stdcall  mymessage ();

int main(int argc, _tchar* argv)

5編譯鏈結

6.執行結果

64位彙編之linux系統呼叫

linux系統中64位彙編和32位彙編的系統呼叫主要有以下不同 1 系統呼叫號不同.比如x86中sys write是4,sys exit是1 而x86 64中sys write是1,sys exit是60。linux系統呼叫號實際上定義在 usr include asm unistd 32.h和 u...

64位Ubuntu中C與intel彙編混合程式設計

test.c include int main asm volatile 彙編語句模板 輸出部分 輸入部分 破壞描述部分 彙編語句模板 assembler template 輸出部分 output operands 和輸入部分 input operands r a m n is not a vali...

linux下64位彙編的系統呼叫 1

現在基本上系統都是64位了,而64位系統下的彙編和32位有了較大的變化,無論是系統呼叫的介面還是c標準庫的介面都和32位彙編有所不同 下面簡單談一下在64位linux下如何利用彙編直接呼叫系統呼叫。需要準備的有 1.一台linux機器 我的系統是ubuntu 14.10 x64版 2.還要乙個彙編器...