19

これはウィキペディアが言うことです:

コンピューター ソフトウェアでは、アプリケーション バイナリ インターフェイス (ABI) は、アプリケーション (または任意の種類の) プログラムとオペレーティング システムまたは別のアプリケーションとの間の低レベル インターフェイスを表します。

ABI は、データ型、サイズ、配置などの詳細をカバーします。関数の引数がどのように渡され、戻り値が取得されるかを制御する呼び出し規則。システム コール番号と、アプリケーションがオペレーティング システムに対してシステム コールを行う方法。完全なオペレーティング システム ABI の場合、オブジェクト ファイル、プログラム ライブラリなどのバイナリ形式。Intel Binary Compatibility Standard (iBCS) などの完全な ABI を使用すると、必要な共有ライブラリが存在し、同様の前提条件が満たされている場合、その ABI をサポートするオペレーティング システムのプログラムを他のオペレーティング システムで変更することなく実行できます。

ABI は規則または標準であり、コンパイラ/リンカーはこの規則を使用してオブジェクト コードを生成すると思います。そうですか?もしそうなら、誰がこれらの慣習を作ったのですか (企業または組織)? ABI がなかったときはどうでしたか? これらの ABI について参照できるドキュメントはありますか?

4

3 に答える 3

13

ABIの定義については、ある程度までは正しいです。典型的な例は、syscallLinux(および他のUNIX)のインターフェースです。

これらは、コードがオペレーティングシステムに特定の義務を実行するように要求するための標準的な方法です。

そのため、OSを作成した人、またはsyscalls後で追加された場合は誰が追加したか(OSで許可されている場合)によって決定されます。たとえば、syscallx86のLinuxインターフェースでは、作成している( )に応じて、syscall数値をにロードしeax、他のパラメーターをに配置するebxなどと記述されています。ecxsyscalleax

通常、インターフェースの機能を実行するのはコンパイラーやリンカーではなく、使用している言語用に提供されているライブラリーです。

Linuxに戻ると、GNU Cライブラリにはfopen(たとえば)のコードが含まれており、最終的には関連するものを呼び出してsyscall下位レベルのタスクを実行します(システムコール番号5 open)。のリストは、syscallsこのPDFファイルにあります。

于 2011-01-27T10:13:10.993 に答える
4

仕様は明確に定義されているのに対し、仕様は慣例よりも適切な用語です。

あなたが正しいです。仕様は標準化団体によって作られています。Windows でサポートされている POSIX 仕様と、gcc などのコンパイラ/ビルド ツール チェーンは、OS がそれに準拠していると想定しており、Linux カーネルでさえ部分的に (ほぼ正確に) 準拠しています。

ABIの前?今日でも、セットトップ ボックスや組み込みシステムを備えたその他のデバイス用の新しいチップが登場するにつれて、ファームウェアは手作業で作成されています。

ドキュメントは、チップがアセンブリ言語によってプログラムされるデータシートのデジタル ロジック コンテンツであり、高水準言語の場合、クロス コンパイラ ツール チェーンのドキュメントは、ABI の一部であるべき仮定を提供します。

于 2013-04-10T02:31:56.843 に答える
2

ABI の概念は、おそらく、他のオペレーティング システムやマシン アーキテクチャ上でプログラムのバイナリ互換性をサポートするために考案されたものです。では、x86 アーキテクチャで動作するオペレーティング システム ディストリビューションでプログラムを作成したとします。さて、プログラマーにとって最も重要なことは、自分のマシンで書いたこのプログラムが、同じまたは異なるアーキテクチャーで実行されている他のマシンでまったく同じように実行できることです。議論のために、他のマシンが実行されているとしましょう。 i386 アーキテクチャでは、ABI またはアプリケーション バイナリ インターフェイスの概念が登場します。すべてのマシン アーキテクチャは、オペレーティング システムのカーネルが外部の世界、つまりユーザー空間プログラムと対話する独自の方法を定義するため、すべてのアーキテクチャは異なるセットを定義します。システムコール、マシンレジスタ、これらのレジスタがどのように使用されるか、ソフトウェア割り込みがカーネルによってどのように処理されるかなど。ABI は、コンパイル、リンク、バイト順など、これらを処理するものです。システム プログラマーは、異なるアーキテクチャで実行される同じオペレーティング システムに対して統一された ABI を定義するのに苦労しました。そのため、すべてのマシン アーキテクチャに独自の ABI があり、それらのマシンのフォーマットを確認するためにプログラムをコンパイルする必要があります。

于 2015-04-22T19:09:29.230 に答える