Mac OS X では、DYLD 形式のバイナリ実行可能ファイルには、ライブラリ ロード システムにファイルの内容の処理方法を指示する「ローダー コマンド」が含まれています。特に、ローダー コマンドは、依存ライブラリを検索する場所などをシステムに指示します。
「otool -l /path/to/your/app」を実行すると、システム上の任意のバイナリのローダー コマンドの完全なリストを表示できます。
一般的に言えば、これらのローダー コマンドは、プロジェクトのコンパイルのリンク段階で「ld」ツールによって設定されます。
私の質問は、ld で (明らかに) サポートされていない公開された型のローダー コマンドを追加するには、どうすればよいですか?
特に、LC_DYLD_ENVIRONMENT ローダー コマンドを利用したいと思います。これは、バイナリのローダー コマンド テーブルで文字列を指定するために使用できます。このコマンドは、実行可能ファイルのコンテキストで環境変数設定としてロードおよび評価する必要があります。
これを容易にする ld への引数はありません。「-sectcreate」のようなものですが、特にローダー コマンドの内容に追加するためのものです。
Mac OS X の少なくとも 1 つの標準アプリである Safari で使用されているため、これが可能であることはわかっています。しかし、彼らがバイナリのある種のリンク後のメッセージによってこれを達成したのか、カスタム ローダー コマンドを構築して連鎖させる方法を知っている ld のカスタム バージョンを使用しているのか、それとも悪用しているのかはわかりません。私が理解できていない ld コマンドの汎用機能です。