execve()システムコールを呼び出さずに静的にリンクされたバイナリをexec()することができるCライブラリが必要です。システムコールがうまくいかないのは、バイナリファイルが実行可能でなく、そのシステム上でバイナリファイルを実行可能にすることができないためです。動的にリンクされたバイナリでは、/lib/ld-linux.so.2 progname
を実行するとそのトリックが実行されますが、静的にリンクされたバイナリ上でsegfaultsが実行されます。Linux userland exec
私はul_exec 1.1をhttp://archive.cert.uni-stuttgart.de/bugtraq/2004/01/msg00002.htmlに見つけましたが、それは私自身のシステムでバイナリHelloのためにsegfaultのようです。
バイナリのコピーを作成して実行可能にし、execve()を呼び出すこともできます。私はそのようなコピーを必要としないソリューションを探しています(パフォーマンスの理由から)。
なぜ実行可能にすることができないのか説明できますか?それ以上の知識がなければ、答えにくいです。 –
ファイルを実行可能にすることができない理由は無関係です。この質問では、バイナリファイルを実行可能にできるかどうかにかかわらず、静的にリンクされたELFバイナリを 'execve()'を呼び出さずに実行できるライブラリを探しています。私は、より高いレベルの問題のための代替ソリューションには興味がありません。 – pts