7

記述子しかわからないときにファイルを実行する必要があります。ファイルへのリンクがない可能性もあるので、どういうわけか名前を見つけることはオプションではありません。すべてのexecve()、execvp()などの関数はファイル名を取ります。dlopen()にも名前が付けられます。

醜い解決策(ファイルの読み取りや関数ポインタの呼び出しなど)は問題ありません。

4

2 に答える 2

9

を使用しfexecveます。

PS:ファイルを読み取って関数ポインタを呼び出すことは間違いなくOKではありません。:)

于 2010-05-23T16:30:19.717 に答える
1

面白い。最善の策は、一時ファイルを作成する必要があるFDを使用してから、通常のexec呼び出しを使用して実行することだと思います。

を使用mkstempして、保証された一意のファイル名を作成できます。次に、ファイル記述子からコンテンツを読み取り、一時ファイルにダンプします。次に、exec呼び出しでmkstempによって指定された名前を使用します。

何らかの理由で新しいファイルを書きたくない場合は、exeファイルのイメージを手動で解析し、メモリに適切にロードしてから、main()関数を呼び出す以外に方法はないと思います。これは、OSにすでに存在する多くの機能を複製しているので、やりたくないと思います。正しく理解するのは難しいでしょうし、努力する価値はないようです。

于 2010-05-23T16:32:33.593 に答える