12

これが私の仕事です:

  • 実行中のマネージド WPF アプリケーションにカスタム マネージド コードを挿入します (つまり、私のコードは他の AppDomain で実行する必要があります)。
  • 挿入されたコードは UI スレッドで実行する必要があります

私が「最高」と言うとき、私は次のことを意味します:

  • 注入プロセスは可能な限り安定している必要があります (スレッドのデッドロックなどはありません)。
  • コードは x86 および x64 プラットフォームで問題なく動作するはずです (特に Vista x64 では)。

最小限のユースケース

  • 実行中の WPF プログラムを選択
  • カスタム コードを挿入する
  • コードを挿入すると、ターゲット プロセスのメイン ウィンドウのタイトルが「コードが挿入されました」に変わります。

私が評価しているソリューション:

1) Windows フックを介したインジェクション ( Snoopなど)

長所:

  • 挿入されたコードは UI スレッドで実行されます

短所:

  • 混合 (c++/cli) 外部 dll が必要
  • デバッグが難しい

2) EasyHookライブラリによるインジェクション

長所:

  • ライブラリは堅実で十分にテストされているように見えます

短所:

  • UI スレッドでコードを実行する方法が見つかりませんでした
  • インジェクション ライブラリに署名して GAC にインストールする必要があります

3) WriteProcessMemory/CreateRemoteThreadEx/LoadLibrary によるインジェクション

長所:

  • 単純

短所:

  • 非常に不安定 (コードは DllMain で実行する必要がある、CLR ホスティングが必要など)

方法 1 を使用します。より良いアプローチをお勧めできますか?

アンマネージ DLL での CLR ホスティングに基づく適切な手法はありますか?

私はこれらの質問を認識していることに注意してください:

4

2 に答える 2

2

私の古いプロジェクトでは、パフォーマンス トレース コードを任意のコードに挿入できる CECIL (mono 用に作成) を使用していました。サンプルは大きすぎてここに貼り付けることができませんが、プロジェクトReflectionStudioと、特にこのインジェクター クラスを見てください。これはmono/cecil Web サイトでいつでも利用できます。唯一のことは、メイン UI スレッドに関する要求を処理することです。

于 2018-04-04T06:46:03.237 に答える