簡単な答え:いいえ。
長い答え:ディスクに書き出さずにこれを行うことは可能ですが、かなり注意が必要です。理論的には、バイナリを読み取り、メモリをマップし、必要に応じてダイナミックリンクを処理し、制御を転送する独自のelfローダーを作成できますが、これは非常に多くの作業であり、努力する価値はほとんどありません。
次善の解決策は、それをディスクに書き込み、unlinkASAPを呼び出すことです。ディスクは「実際の」ディスクである必要はなく、tmpfsなどでもかまいません。
私が最近使用している代替手段は、完全にコンパイルされたバイナリを渡すのではなく、代わりにLLVMバイトコードを渡すことです。これにより、JIT、解釈、保存を適切に行うことができます。これには、アプリケーションを異種環境で動作させるという利点もあります。
fmemopen、、の組み合わせfilenoを試してみたくなるかもしれませfexecveんが、これは2つの理由で機能しません。
マンページからfexecve():
「ファイル記述子fdは読み取り専用で開く必要があり、呼び出し元には、参照するファイルを実行する権限が必要です。」
つまり、ファイルを参照するfdである必要があります。
マンページからfmemopen():
「これらの関数によって返されるファイルストリームに関連付けられたファイル記述子はありません(つまり、fileno(3)返されたストリームで呼び出されるとエラーが返されます)」