次の(要約された)コードを呼び出すインジェクターがあります。
var processes = Process.GetProcessesByName("target");
/* ... */
var process = processes[0];
/* ... */
process.Kill();
RemoteHooking.CreateAndInject(process.MainModule.FileName, string.Empty, 0,
InjectionOptions.NoService | InjectionOptions.DoNotRequireStrongName,
typeof(EntryPoint).Assembly.Location, typeof(EntryPoint).Assembly.Location,
out injectedProcessId, null);
挿入する必要がある DLL には、次のコードのみが含まれています。
public class EntryPoint : IEntryPoint {
public EntryPoint(RemoteHooking.IContext InContext) {}
public void Run(RemoteHooking.IContext InContext) {
RemoteHooking.WakeUpProcess();
Thread.Sleep(5000);
}
}
残念ながら、典型的な Windows エラー報告ツールが表示され、視覚的な例外メッセージがまったく表示されず、DLL に入力されずに、インジェクターがクラッシュするだけです。イベント ビューからのエラーは次のとおりです。
Faulting application name: TestInjector.vshost.exe, version: 14.0.23107.0, time stamp: 0x559b788a
Faulting module name: EasyHook64.dll, version: 2.7.0.0, time stamp: 0x589704aa
Exception code: 0xc0000409
Fault offset: 0x0000000000091a9b
デバッグ モードで実行している場合、EasyHook コードを段階的に実行して重要な場所を見つけることができませんが、少なくとも 1 つの例外が発生します。
この問題をさらにデバッグして原因を突き止める方法について何か提案はありますか? 干渉を減らすためにさまざまなアプリケーションを閉じようとしましたが、何も役に立ちませんでした。