BashでELFファイルを実行する方法は?

BashでELFファイルを実行する方法は?

Linux Boxを使用する場合は、bashをシェルとして使用します。ここでbashがELFファイルの実行をどのように処理するかを知りたいと思います。つまり、./programと入力すると、プログラムはELFファイルです。 bash-4.3.tar.gzをgrepしましたが、ファイルがELFかどうかを調べる一種の魔法パーサがないようで、 exec() システムコールも見つからないようです。

全体のプロセスはどのように行われますか? BashはELFの実行をオペレーティングシステムにどのように渡しますか?

答え1

BashはELFについて何も知りません。単に外部プログラムを実行するように要求したものを見て、指定した名前をそのまま渡します。execve(2)。実行ファイル形式などの知識を理解し、シェルボーンライン、実行権限が後ろにありますシステムコール、カーネルから。

(他のシェルにも同様に適用されますが、使用することを選択できます。exec(3)しかし、家族。 )

Bash 4.3では、5195行でこれが発生します。execute_cmd.cshell_execve()機能から。

ソースコードレベルでLinuxを理解したい場合は、コピーをダウンロードすることをお勧めします。Unix V6またはV7の研究と通過それ最新のLinuxシステムで見つかったすべての複雑さの代わりに。ライオンの本コーディングのための良いガイドです。

V7はどこにありますか?ボンシェルデビュー。完全なCソースコードは、BashのCファイルサイズの半分を少し超えています。これトンプソンシェルV6のサイズは元のBourneシェルサイズのほぼ半分です。しかし、これら2つの単純なシェルはすべてBashと同じことを行い、同じ理由もあります。 (これはThompsonシェルでの呼び出しexecv(2)とBourneシェルモジュールでの呼び出しのようです。)texec()execve()execs()service.c

関連情報