2

クローンを使用してvfrokの動作をシミュレートすることは可能ですか?これまでのところ私は

pid=clone(fn,cStack,SIGCHLD|CLONE_FS | CLONE_FILES | CLONE_VM | CLONE_VFORK,NULL);

しかし、私はまだ自分のスタックを渡す必要があるので、新しいプロセスは異なるスタックフレームで動作していますが、同じアドレス空間で動作しています(CLONE_VMのため)、そして私が理解しているように、vforkを呼び出してexecの関数を使用しない場合、新しいプロセスは親と同じアドレススペースで動作しており、同じスタックフレームを使用します。

それで、同じアドレス空間で動作し、親と同じスタックフレームを使用しているクローンで新しいプロセスを作成することは可能ですか?

4

1 に答える 1

3

アセンブラで関数を書かないとできません。これは「修正」できない根本的な問題です。vforkほとんどのアーチ(リターンアドレスがスタックに格納されているアーチ)では、syscallラッパー自体でさえCではなくアセンブリで記述する必要があります。これは、子が親と同じスタックを使用して実行された後、関数(、、またはその他のラッパー)が親で返す必要のある戻りアドレスを上書きする可能性があるためvforkですclone

アセンブラでは、syscallを実行する前に、リターンアドレスをレジスタに保存するだけです。

于 2012-04-06T12:56:56.607 に答える