Linux彙編與C互相呼叫

2021-09-08 22:18:40 字數 1563 閱讀 1477

一、簡介

二、基礎知識

對於c和組合語言的介面主要有兩個問題需要解決

1、呼叫者與被呼叫者的引數傳遞

正常的,定義乙個函式總是希望它完成某些功能,乙個毫無用處的函式將毫無意義。這些功能有常常是更大的功能的一部分,而函式完成這些功能或多或少都要與外界聯絡(乙個完全不與外界聯絡的函式也是乙個毫無意義的函式)(延時函式也要消耗時間,時間也屬於外界的一種資源),比如要傳遞一些資料給其處理,處理過後返回處理的結果。這種資料的傳遞可以形象的通過兩種方式來實現,第一種是外界直接把資料給函式,第二種是函式自己去外界取資料。

對於第一種:

這種資料傳遞通過堆疊完成,是一種隱性方式,隱含操作是:在執行呼叫時從呼叫程式參數列中的最後乙個引數開始 ,自動依次壓入堆疊;將所有引數壓入堆疊後,再自動將被呼叫程式執行結束後的返回位址 (斷點)壓入堆疊,以使被調程式結束後能返回主調程式的正確位置而繼續執行。

對於第二種:

對於第二種模型,必須開闢乙個公共的區域,呼叫者及被呼叫者都必須能訪問此區域。

2、說明和建立呼叫者與被呼叫者間的聯絡

為了建立呼叫與被呼叫模組間的連線關係,被呼叫的匯程式設計序應用global,說明其可被外部模組呼叫;而呼叫程式則應預先說明要引用的外部模組名。

參考:

http://

三、例項

1、32位:linux彙編與c互相呼叫

2、內嵌彙編

內嵌彙編格式

四、常見問題

1、如下

linux at&t彙編錯誤:error: invalid instruction suffix for `push'

解決方法:

go與c互相呼叫

此例子來自於go原始碼中,藉此來和大家分享一下兩者如何呼叫,網上很多文章語言不詳,也沒有乙個完整的測試例子 首先src 目錄下有 testcgowin目錄下 這裡的 obj目錄是cgo生成的 這裡需要展示的是go中如何呼叫c語言匯出函式,以及在c語言中如何呼叫go的匯出函式.關鍵是cthread.g...

go與c互相呼叫

此例子來自於go原始碼中,藉此來和大家分享一下兩者如何呼叫,網上很多文章語言不詳,也沒有乙個完整的測試例子 首先src 目錄下有 testcgowin目錄下 這裡的 obj目錄是cgo生成的 這裡需要展示的是go中如何呼叫c語言匯出函式,以及在c語言中如何呼叫go的匯出函式.關鍵是cthread.g...

python與C 的互相呼叫

python與c 的互相呼叫 一 c 呼叫python 新建乙個專案,新增引用 ironpython.dll,microsoft.scripting.dll 在ironpython的安裝目錄中 建立乙個文字檔案命名為hello.py,把該檔案新增的當前的專案中,並設定為總是輸出。hello.py d...