4

私は何日もこれを理解しようとしてきました。明らかに、私は経験が浅すぎて、さまざまな例から実際のコードを理解することができません。また、どんなに頑張っても、理解できるほど簡単な説明を見つけることができません。これは本当に私のお茶ではありません。

私の質問は、次のことを行う方法の非常にわかりやすい疑似コードまたは説明を含むリンク(または回答)を取得できますか?

ac プログラムで、別の ELF 実行可能ファイルをメモリにロードし、メモリとスタック、およびその他の必要なすべての変数をセットアップしてから、それを実行します。

基本的な概念は理解していますが、うまくまとまりません。ここ StackOverflow を含め、他の多くの情報源を確認しましたが、それらはすべて複雑すぎて、私の愚かな脳には理解できません。

ありがとうございました。

4

2 に答える 2

0

ac プログラムで、別の ELF 実行可能ファイルをメモリにロードし、メモリとスタック、およびその他すべての必要な変数を設定してから実行します。

C プログラムはすでに (独自の ELF イメージから) メモリにロードされて実行されているため、C プログラムでは実際にはこれを行うことはできません。2 つの ELF イメージは互いに競合するため、新しいイメージをマッピングしようとすると、途中で古い (実行中の) イメージを台無しにしてしまい、うまくいきません。

イメージを実行するときにカーネルが最初に行うことは、ユーザーのアドレス空間をクリアする (空にする) ことです。これにより、競合することなく新しいイメージをロードできるようになります。

そうは言っても、最初のイメージが 2 番目のイメージをロードし、両方が同時にメモリに存在できるように、競合のない 2 つの ELF イメージをビルドするように (慎重にリンクするスクリプトを使用して) 調整できます。これが基本的に ld.so (動的リンカー) の動作方法です。特別なアドレスにリンクされているため、「通常の」プログラムと共存できます。しかし、2 つの「通常の」ELF 実行可能ファイルは、同じアドレスに存在する必要があります。

于 2013-10-30T05:00:21.943 に答える