
私は今読んだ例ABIの。
ABI は API に似ていますが、ABI は機械語で、API は高水準プログラミング言語です。
ABI は、マシン言語でコンパイルされたライブラリによって提供され、そのライブラリに属するインターフェイスですか? (私の理解が正しければ、自作のコンパイルされたライブラリは独自の ABI を提供します (上記の例を参照)。オペレーティング システムはコンパイルされたライブラリと見なすことができ、アプリケーションがシステム コール サービスにアクセスするための独自の ABI を提供します。)
上記の例では、自作コンパイルライブラリの ABI がオペレーティング システムに依存するかどうかについては触れていません。
https://en.wikipedia.org/wiki/アプリケーションバイナリインターフェースただし、オペレーティング システムについては次のように言及しています。
ABI は次のような詳細をカバーします:
プロセッサ命令セット (レジスタ ファイル構造、スタック構成、メモリ アクセス タイプなどの詳細を含む)
プロセッサが直接アクセスできる基本データ型のサイズ、レイアウト、配置
呼び出し規約。関数の引数の受け渡し方法と戻り値の取得方法を制御します。たとえば、すべてのパラメータをスタックで渡すか、一部をレジスタで渡すか、どのレジスタをどの関数パラメータに使用するか、スタックで渡された最初の関数パラメータをスタックの最初にプッシュするか、最後にプッシュするかなどです。
アプリケーションがシステムコールを行う方法オペレーティングシステムABIがシステムコールスタブへの手続き呼び出しではなく直接のシステムコールを指定している場合、システムコール番号は
完全なオペレーティング システム ABI の場合は、オブジェクト ファイル、プログラム ライブラリなどのバイナリ形式です。
コンパイルされたライブラリの ABI はオペレーティング システムに依存しますか? (おそらく依存しません。コンパイルされたライブラリがオペレーティング システムの ABI を介してシステム コール サービスを使用する場合でも、OS (の ABI) に依存するのはコンパイルされたライブラリであって、その ABI ではありません。)
コンパイルされたライブラリの ABI は、オペレーティング システムの ABI から独立できますか?
ありがとう。
答え1
コンパイルされたライブラリの ABI はそのターゲットに依存し、必ずしもオペレーティング システムを含める必要はありません。オペレーティング システムのない組み込みシステム用のライブラリや、オペレーティング システムの ABI を抽象化する Java などのプラットフォーム用のライブラリがあります。
おっしゃるとおり、オペレーティングシステムのABIはライブラリ(またはプログラム)がどのように呼び出すかを決定しますが、必ずしもライブラリがどのように呼び出されるかを決定するわけではありません。ライブラリのABIを決定するのは、実際にはそのAPIと、それが使用するコンパイラの詳細です。コンパイラは通常、ターゲットプラットフォームのABIに従いますが、それはOS固有のものではありません。たとえば、Linuxでは、プラットフォームABIはシステム V ELF ABI、アーキテクチャ固有のプロセッササプリメント付き。
ただし、たとえばライブラリが ABI 内でシステム固有の構造を直接公開する場合など、オペレーティング システムの ABI がライブラリの ABI に漏れる可能性があります。