私は別のアプリケーション内に注入しましたが、この「ユーザー呼び出し」関数を呼び出したいと思っています。そこで、正しいレジスターにパラメーターを配置して関数を呼び出す単純な ASM ラッパーを作成しました。
これは、私の ASM バイトをアプリケーションに配置するための私のコードです。
ASMWrapper = Marshal.AllocCoTaskMem(asm.Length);
Marshal.Copy(asm, 0, ASMWrapper, asm.Length);
この後、この場所でデリゲートを登録するだけで、準備完了です。面白いことに、これはテストした 5 台のコンピューターのうち 4 台で動作し、最後にクリーンな Windows 7 Ultimate でフォーマットしてインストールしようとしたコンピューターで動作します。他のコンピューターと同じように。それでもうまくいきません。
私にできることはWriteProcessMemory
、ASM コードを記述することだけです。これを行うと、元のコードがある場所にコードを配置できるため、機能します。
なぜこのように振る舞うか知っている人はいますか?AllocCoTaskMem
手動で配置する場所を探すのではなく、自分の asm を配置する方法を使用することをお勧めします。