コンパイルされたライブラリのABIはオペレーティングシステムによって異なりますか?

コンパイルされたライブラリのABIはオペレーティングシステムによって異なりますか?

私は今読んだ。一例ABI。これが正しいか

  • ABIは、ABIが機械語であり、APIが高度なプログラミング言語である点を除いて、APIに似ています。

  • ABIは、機械語でコンパイルされたライブラリに属して提供されるインタフェースですか? (私の推測が正しい場合、自家製のコンパイルされたライブラリは独自のABIを提供します(上記の例を参照)。オペレーティングシステムはコンパイルされたライブラリと見なすことができるため、アプリケーションがシステムコールサービスにアクセスできるように独自のABIを提供します。 )

上記の例では、自己コンパイルされたライブラリのABIがオペレーティングシステムに依存しているかどうかについては説明しません。

https://en.wikipedia.org/wiki/Application_binary_interfaceただし、オペレーティングシステムは次のように言及されています。

ABIは以下の詳細をカバーしています。

プロセッサ命令セット(レジスタファイル構造、スタック構成、メモリアクセスタイプなどの詳細)

プロセッサが直接アクセスできる基本データ型のサイズ、レイアウト、並べ替え

関数パラメータが渡され、戻り値がどのように取得されるかを制御する呼び出し規則、任意のパラメータ)関数パラメータがスタックに最初にプッシュされるか最後にプッシュされるか。

アプリケーションがシステムコールを実行する方法オペレーティングシステムまた、ABIがシステムコールスタブへのプロシージャコールではなく直接システムコールを指定した場合は、システムコール番号

完全なオペレーティングシステムABIの場合、オブジェクトファイル、プログラムライブラリなどのバイナリ形式です。

コンパイルされたライブラリのABIはオペレーティングシステムによって異なりますか? (そうではありません。コンパイルされたライブラリがオペレーティングシステムのABIを介してシステムコールサービスを使用していても、ABIではなくオペレーティングシステム(ABI)に依存するコンパイルされたライブラリです。)

コンパイルされたライブラリのABIは、オペレーティングシステム(ABI)とは無関係ですか?

ありがとうございます。

ベストアンサー1

コンパイルされたライブラリのABIはターゲットによって異なり、必ずしもオペレーティングシステムを含むわけではありません。オペレーティングシステムのない組み込みシステム用のライブラリがあり、オペレーティングシステムのABIを抽象化するJavaなどのプラットフォーム用のライブラリがあります。

ご存じのように、オペレーティングシステムのABIはライブラリ(またはプログラム)がどのように呼び出されるかを決定しますが、必ずしもライブラリがどのように呼び出されるかを決定するわけではありません。ライブラリのABIを決定することは、実際にAPIとライブラリが使用するコンパイラの詳細です。コンパイラは通常、ターゲットプラットフォームのABIに従いますが、これはオペレーティングシステムに限定されません。たとえば、Linuxでは、プラットフォームABIは次のようになります。システムV ELF ABI、アーキテクチャ固有のプロセッサを追加。

ただし、オペレーティングシステムのABIはライブラリのABIに漏洩する可能性があります。たとえば、ライブラリがシステム固有の構造をそのABIに直接公開する場合です。

おすすめ記事