フックを使用して別のプロセスの実行中のメモリにジャンプし、DLL インジェクションのようなものなしでジャンプして戻ることは可能ですか?
たとえば、プロセスA
にプロシージャがfoo
あり、プロセスに(フックに使用される)同一のプロトタイプを持つB
プロシージャがある場合、両方のプロセスが実行されていると仮定して、jmp toにフックすることは可能ですか?bar
foo
foo
bar
編集: これは Windows で行う必要があります。
定義上、プロセスはサンドボックスです。誤ってアドレス空間の外に出た場合でも、SIG_USR シグナルとして発生してキャッチされ、セグメンテーション違反として報告されます。
プロセス間の通信に使用できる共有メモリ -shmem、パイプ、ソケットなどのプロセス間通信メカニズムがあると述べました。
編集:リモートメソッド呼び出しを提供するCORBAなど、RPC(リモートプロシージャコール)メカニズムも利用できます。
Windows の各プロセス (Unix や他の最新の OS の大部分と同様) には、通常は異なる物理アドレスにマップされる独自の仮想メモリ空間があります。したがって、別のプロセスのアドレス空間に DLL を挿入することが、そのプロセスで何かをフックする唯一の方法です。一方、そのプロセスに DLL があると、そこでできることはたくさんあります。独自のスレッドを生成し、Windows メッセージを使用して親プロセスと通信します (Windows で最も簡単な通信方法の 1 つとして)。