2010-08-12 68 views
1

我得到了所有這些術語混淆混淆。入門與ABI調用約定和拱

ABI與架構鏈接:x86-64具有與i386不同的ABI。 但是你也可以定義你自己的通話公約cdecl ...

那麼所有這些概念之間的聯繫是什麼? 哪一個是定義另一個?

大部分我覺得我很迷惑ABI。你在調用約定的部分內容是什麼?

感謝

回答

2

這是一個很大的課題還是給你一些指點:

的ABI(應用程序二進制接口)覆蓋需要以指定該應用程序可以在某些系統上工作的細節(通常使用操作系統)。所以,要到的例子:

  • 數據類型大小(例如C標準給出了類型只是最低要求,整型至少應該一樣大的短,短的必須是16位。)
  • 佈局在結構和位域的存儲器
  • 調用約定(當一個函數被調用,其中它可以找到它的參數,其在寄存器,其上堆等)
  • 堆棧幀(它是什麼本堆棧上,有用的對於調試器)
  • 系統調用號
  • 他人

基本上需要,以便建立與某些其它部件(庫,OS)可以被包括在一個ABI一起運行的程序是已知的任何細節。一些ABI指定更多,一些指定更少的細節。

硬件架構也可以看作是一個規範,但更低級別(它是關於硬件而不是軟件)。硬件體系結構指定了可用的指令集,存儲器層次結構以及如何訪問外設等。對於一個硬件體系結構,可以有不同的ABI-s。您也可以爲多個(但通常相似)的硬件架構擁有相同的ABI。