ABIが何であるかを明確に理解したことがありません。ウィキペディアの記事を紹介しないでください。もし私がそれを理解することができれば、私はここにそのような長い投稿を投稿しないでしょう.
これは、さまざまなインターフェースに関する私の考え方です。
テレビのリモコンは、ユーザーとテレビの間のインターフェースです。これは既存のエンティティですが、それ自体では役に立ちません (機能を提供しません)。リモコンのこれらの各ボタンのすべての機能は、テレビ セットに実装されています。
インターフェイス:
functionality
とconsumer
その機能の間の「既存のエンティティ」レイヤー です。インターフェイス自体は何もしません。背後にある機能を呼び出すだけです。ユーザーが誰であるかに応じて、さまざまなタイプのインターフェイスがあります。
コマンド ライン インターフェイス (CLI)コマンドは既存のエンティティであり、コンシューマーはユーザーであり、機能は背後にあります。
functionality:
このインターフェイスを説明している目的を解決する私のソフトウェア機能。
existing entities:
コマンド
consumer:
ユーザーグラフィカル ユーザー インターフェイス (GUI)ウィンドウ、ボタンなどは既存のエンティティであり、消費者はユーザーであり、機能は背後にあります。
functionality:
このインターフェイスを説明している問題を解決する私のソフトウェア機能。
existing entities:
ウィンドウ、ボタンなど
consumer:
ユーザーアプリケーション プログラミング インターフェイス (API)関数 (より正確には) インターフェイス (インターフェイス ベースのプログラミング) は既存のエンティティであり、ここでのコンシューマーはユーザーではなく別のプログラムであり、機能はこのレイヤーの背後にあります。
functionality:
このインターフェイスを説明している問題を解決する私のソフトウェア機能。
existing entities:
関数、インターフェイス (関数の配列)。
consumer:
別のプログラム/アプリケーション。Application Binary Interface (ABI)ここから問題が始まります。
functionality:
???
existing entities:
???
consumer:
???
- 私はさまざまな言語でソフトウェアを作成し、さまざまな種類のインターフェイス (CLI、GUI、および API) を提供してきましたが、ABI を提供したことがあるかどうかはわかりません。
ABI は、次のような詳細をカバーします。
- データ型、サイズ、配置。
- 関数の引数がどのように渡され、戻り値が取得されるかを制御する呼び出し規則。
- システム コール番号と、アプリケーションがオペレーティング システムに対してシステム コールを行う方法。
その他の ABI は、次のような詳細を標準化します。
- C++ の名前マングリング、
- 例外の伝播、および
- 同じプラットフォーム上のコンパイラ間の呼び出し規約を呼び出しますが、クロスプラットフォームの互換性は必要ありません。
誰がこれらの詳細を必要としますか? OSは言わないでください。私はアセンブリプログラミングを知っています。リンクと読み込みの仕組みを知っています。私は内部で何が起こっているかを正確に知っています。
C++ の名前マングリングが登場したのはなぜですか? バイナリレベルで話していると思いました。言語はなぜ入ってくるのですか?
とにかく、[PDF] System V Application Binary Interface Edition 4.1 (1997-03-18)をダウンロードして、正確に何が含まれているかを確認しました。うーん、ほとんど意味不明でした。
ELFファイル形式を説明するために 2 つの章 (第 4 および第 5) が含まれているのはなぜですか? 実際、この仕様の重要な章は 2 つだけです。残りの章は「プロセッサ固有」です。とにかく、それはまったく別のトピックだと思いました。ELF ファイル形式の仕様がABIであるとは言わないでください。定義によると、インターフェイスとしての資格はありません。
私たちは非常に低いレベルで話しているので、それは非常に具体的でなければなりません。しかし、「命令セットアーキテクチャ(ISA)」固有の方法はわかりませんか?
Microsoft Windows の ABI はどこにありますか?
したがって、これらは私を悩ませている主要なクエリです。