機能的には、バイナリ(たとえば、シェルで実行できるELFバイナリ)は、特定のターゲットABIの機械語コードをバイナリ形式で含むファイルであるという点で、ライブラリと多少似ています。
違いは次のとおりです。
- 実行可能なバイナリには、明確に定義された署名
main()
(パラメータと戻り値)を持つ明確に定義されたエントリポイント(Cの場合)がありますが、ダイナミックライブラリには任意の名前とシグネチャを持つエントリポイントが無制限であり、各エントリポイントを知る必要があります。利用したい発信者に。 - 実行可能なバイナリは新しく作成された独自のプロセスで実行されますが、ダイナミックライブラリコードは呼び出し元のプロセス(最初はスレッドでもあります)で実行されます。
しかし、実装の面では、ファイルの種類がどれだけ異なるかわかりません。
ただし、理論的には実行可能なバイナリをインポートして変換して単一の関数にエクスポートすることは可能ですint main (int argc, char *argv[])
。
機能的に私が見ることができる唯一の潜在的な障害は、実行可能なバイナリがプロセスの「ボス」になると期待していますが、ライブラリ機能は明らかにそうではありません。 「ボス」が一部のリソースに対する排他制御を期待する場合(たとえば、最初のグローバル変数の移動)、動的に割り当てられたスペースの代わりにハードコーディングされたメモリアドレスに配置されるため、競合が発生して予測不能な動作が発生する可能性がありますあります。
Q:コンパイルされたELFバイナリを他のプロセスで呼び出して実行できる動的ライブラリに変換できるツールはありますか?