Linuxで特定の「実行可能形式」のローダーを設定できますか?

Linuxで特定の「実行可能形式」のローダーを設定できますか?

この質問は続く コンパイラがメモリにコードを配置する方法 この内容はStack Overflowに掲載されました。

ldLinuxで利用可能な(GNU)ユーティリティについていくつかの質問があります。

たとえば、プログラムがシェルで実行されるたびに、シェルはとしてマークされた./a.outプログラムldをロードしますa.out

  1. ldシェルはを使用してロードする必要があることをどうやって知ることができますか? ELF形式であることを確認するためにa.outスキャンし、その場合は使用しますか?特定の形式の実行可能ファイル名を指定する規則がないため、間違いなくファイル拡張子を使用することはできません。a.outld

  2. ユーティリティはldELFに加えて他の実行可能形式で表現されたプログラムをロードできますか?

  3. 私が「xyz」と言う独自の実行可能ファイル形式を考え、次にそのような実行可能abcファイルを処理するために独自のローダーを作成するとします。それでは、「ローダーを使用してabc特定の実行可能形式「xyz」でコンパイルされたプログラムをロードするように構成できるシェルコマンドはありますか?」

答え1

  1. シェルはわかりませんが、カーネルは知っています。バラよりLinuxにはどのような実行ファイルがありますか?詳しくはリンクされた記事をご覧ください。カーネルローダはバイナリをロードし、必要に応じて対応するインタプリタ(ld.soダイナミックバイナリの場合)をロードします。

  2. 各実装はld.soフォーマットによって異なります。

  3. はい、カーネルにバイナリローダーを追加したり、binfmt_misc.seeを使用すると可能です。モノの驚くべき点は何ですか?もっと学ぶ。

関連情報