2010-11-20 11 views
1

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()を呼び出すこともできます。私はそのようなコピーを必要としないソリューションを探しています(パフォーマンスの理由から)。

+1

なぜ実行可能にすることができないのか説明できますか?それ以上の知識がなければ、答えにくいです。 –

+0

ファイルを実行可能にすることができない理由は無関係です。この質問では、バイナリファイルを実行可能にできるかどうかにかかわらず、静的にリンクされたELFバイナリを 'execve()'を呼び出さずに実行できるライブラリを探しています。私は、より高いレベルの問題のための代替ソリューションには興味がありません。 – pts

答えて

2

私は現代のx86 Linuxesで動作するようにupdated The Grugq's userland execをしました。私は最初からx86_64ユーザーランドのexecを書きました。

+0

ありがとうbruce !!! – almosnow

1

次に、実行ビットを指定された任意のファイルにマップするusermodeファイルシステム(たとえば、python-fuseを使用)について教えてください。それはあまりにも多くのパフォーマンスヒットでしょうか?

+0

はい、それはファイルをコピーするよりも速くなければなりません。しかし、私の元々の質問は未回答です:open()+ ELFヘッダ解析+ mmap()でexecve()をエミュレートするライブラリが必要です。 – pts

0

一部ではない、完全な生産対応の実装との良好な短期のwikiの記事があります:http://plash.beasts.org/wiki/UserModeExec

+0

リンクが壊れています。 archive.orgはアーカイブしません。これは、StackOverflowが人々が自己完結型の回答を投稿することを望んでいる理由です。真剣に! – bazz

関連する問題