Application_Binary_Interface
[Wikipedia|▼Menu]

アプリケーションバイナリインタフェース(ABI, : Application Binary Interface)とは、アプリケーション(ユーザ)プログラムとシステム(オペレーティングシステムライブラリ)との間の、バイナリレベルのインタフェースである。また、アプリケーション相互間や、それらの部品(プラグイン等)とのバイナリインタフェースもある。

ABIはアプリケーションプログラミングインタフェース (API) とは異なる。APIはソースコードとライブラリ間のインタフェースを定義したものであり、同じAPIをサポートしたシステム間では同じソースコードをコンパイルして利用できる。一方、ABIはオブジェクトコードレベルのインタフェースであり、互換ABIをサポートするシステム間では同じ実行ファイルを変更無しで動作させることができる。
概要

ABIには、以下のような定義が含まれる。

CPU - 命令セットエンディアンなど。

データ - データ型、大きさ、配置(アラインメント)など。

呼出規約 - 関数引数がどのように渡され、リターン値がどのように渡されるかを定義したもの。

システムコール - システムコール番号と具体的なシステムコールの仕組み。

実行ファイルやライブラリの詳細なフォーマットUNIXならば、COFFELFなど)。

Intel Binary Compatibility Standard (iBCS) のような完全なABIでは[1]、オペレーティングシステム (OS) が何であれ必要な共有ライブラリが存在するなどの前提条件が満たされていれば、そのABIをサポートしたシステム間でプログラム(実行ファイル)を全く修正せずに動作させることができる。

他のABIとして例えばC++名前修飾[2]例外の伝播[3]や呼出規約があるが、あくまでも同じプラットフォーム上のコンパイラ間のABIであり、プラットフォーム間の互換性までは要求されない。
EABI

EABI (Embedded Application Binary Interface) とは、組み込みシステムのソフトウェアについてのファイルフォーマット、データ型、レジスタ使用法、スタックフレームの構成、関数の引数渡し方法などについての規約を意味する。

あるEABIをサポートするコンパイラで生成したオブジェクトコードは、同じEABIをサポートする別のコンパイラで生成したコードと互換性があり、コンパイラが異なっていても同じEABIに対応していればライブラリやオブジェクトコード間でリンク可能である。アセンブリ言語でコードを書く場合でもEABIに準拠するように書けば、他のコードとのリンクが保証される。

EABIと汎用OS向けABIとの主な違いは、アプリケーションのコードでも特権命令の使用が許されている点、ダイナミックリンクが要求されない点(完全に不可能とされている場合もある)、メモリを節約するためスタックフレームをなるべくコンパクトに構成している点が挙げられる[4]

EABIが広く使われているCPUアーキテクチャとしては、PowerPC[5]ARM[6]MIPS[7]がある。

EABIの選択は性能に影響することがある[8][9]
ABI共通化の試みとその成果

Unix系OSでは、同じハードウェアプラットフォーム上で非互換な複数のOSが動作する。

例えばRISCチップにおいては以下のような例がある。

POWER系 : AIX 5L / Solaris10g / Linux


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:13 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef