天堂网中文在线WWW_国产欧美日韩亚洲一二三区_中文人妻中文出轨AV_亚洲高清乱码午夜电影网_欧美老熟妇乱子

當前位置:首頁 > 熱點 > 正文

天天時訊:abigail(abi)2023-06-22 09:17:45 | 來源:互聯(lián)網(wǎng) | 查看: | 評論:0

1、比如我在PC上用不管什么樣的COMPILER, 只要產(chǎn)生符合LINUX的ELF文件, 用相應的INSTRUCTION SET(比如INTEL, PPC, SPARC). 就可以在一個LINUX機器上運行. 調(diào)用系統(tǒng)或別人的LIB.ABI定義了BINARY的文件格式, 內(nèi)容, 以及裝載/卸載程序的要求, 函數(shù)調(diào)用的參數(shù)傳遞規(guī)則, 寄存器, 堆棧的使用等. abi(應用二進制接口)我的理解就是機器代碼一層的接口。

2、先說一下api(特指系統(tǒng)調(diào)用),api基本上是和機器硬件平臺無關但是和操作系統(tǒng)密切相關的接口,一個api調(diào)用定義了一個對內(nèi)核的操作,以及操作的參數(shù)。

3、C語言會議函數(shù)的形式調(diào)用api。


【資料圖】

4、abi,是比api更貼近硬件的一層接口,它規(guī)定的是二進制代碼之間的調(diào)用規(guī)則。

5、舉個例子來說吧!一個應用程序,調(diào)用了.so庫中的函數(shù)或者系統(tǒng)調(diào)用,如果它的編譯器可以找到被調(diào)用函數(shù)或者系統(tǒng)調(diào)用的話,則編譯可以同過,也就是說,它是用的api是正確的。

6、但是,這個調(diào)用離成功還很遠。

7、 首先,如果編譯出來的代碼和運行庫函數(shù)和系統(tǒng)調(diào)用的代碼不是一個硬件平臺的,則這個應用根本就不能和被調(diào)用代碼運行在一起,則調(diào)用不會成功。

8、即使庫函數(shù)、系統(tǒng)調(diào)用和是運行在同一硬件平臺上的調(diào)用也不一定會趁成功。

9、因為程序最終是被編譯成二進制代碼的,并且是要加載到內(nèi)存中運行的。

10、那么,在調(diào)用庫函數(shù)或者系統(tǒng)調(diào)用的時候,應用要先要以庫函數(shù)或者系統(tǒng)調(diào)用指定的方式和位置(內(nèi)存或者寄存器)設置參數(shù),然后通過中斷或者其他方式跳轉(zhuǎn)到被調(diào)用代碼的起始處進行執(zhí)行,被調(diào)用代碼從指定位置去到參數(shù),處理完畢之后再將結果放到指定的位置,最后應用再到指定的地方取回結果,調(diào)用完畢!我認為這個過程中,存放參數(shù)和結果的位置屬于abi規(guī)定的范圍,被調(diào)用程序的跳轉(zhuǎn)地址或者中斷號碼也是abi規(guī)定的范圍。

11、如果存取參數(shù)、結果的位置沒有明確的規(guī)范,或者調(diào)用、被調(diào)用雙方?jīng)]有遵照統(tǒng)一個規(guī)范,那么這個調(diào)用能夠根本就不可能成功;如果系統(tǒng)提供的庫函數(shù)路徑不正確,調(diào)用也不會成功;如果中斷代碼使用錯誤,調(diào)用也不會正確。

本文到此分享完畢,希望對大家有所幫助。

上一篇:中國首款敞篷電跑亮相英國銀石 軟頂敞篷加剪刀門組合顛覆而至 最后一頁下一篇:

最近更新
?