EN JP CN

インターセプト

インターセプト

kwinject は、プロセス作成要求をインターセプトし、作成されたプログラムの名前を既知のコンパイラのリストと比較して一致を試みます (kwinject の -P オプションを参照)。一致するものが検出されると、コマンドラインがオプションフィルターを通して渡され、出力ファイルに書き出されます。その後、元々要求されたプロセスが作成されます。一致するものが検出されなかった場合、プロセスの作成要求はシステムに直接渡されます。

実行されたプロセスを kwinject がキャプチャする仕組みは、ターゲットプラットフォームによって異なります。

Unix では、kwinject は、ユーザープロセスの開始前に LD_PRELOAD 環境変数をインターセプト ライブラリをポイントするように設定します。ユーザーコマンドラインが開始されると、kwinject のメインモジュールがローカルソケットを開き、イベントの受信を開始します。プログラムが動的にリンクされたライブラリの一部を成す関数を呼び出すたびに、システムのダイナミックリンカー/ローダーは事前にロードされているライブラリ内で検索を実行してからそれ以外の場所を検索します。kwinject の事前ロード済みのライブラリは、多数のシステム呼び出し (execv、execvp、および execve) を再定義して、プログラムが新しいプロセスを実行しようとするたびに、事前ロード済みのライブラリからの関数が一時的にアプリケーションの制御を行えるようにします。再定義されたシステム関数は、実行済みのコマンドラインをソケットを介して kwinject のメインモジュールにレポートしてから、元のシステム関数を呼び出します。

Windows では、kwinject は、デバッグモードでユーザープロセスを開始し、CREATE_PROCESS デバッグイベントを受信します。新しいプロセスに関する情報はシステムから kwinject に直接渡されるため、別のインターセプトモジュールまたは内部プロセス通信チャネルを維持する必要はありません。基本的に kwinject は、Windows 上では簡素化されたデバッガーのように動作します。新しい CREATE_PROCESS イベントが受信されると、kwinject は、プロセスのアドレス空間を調査し、情報 (現在の作業ディレクトリ、コマンドライン、環境変数など) をキャプチャします。