私は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はどこにありますか?
したがって、これらは私を悩ませている主要なクエリです。