2

別のプロセス (C++) で呼び出したいメソッドのアドレスがわかっている場合、C# でそれを行うにはどうすればよいですか?

メソッドのオフセットは常に同じです。

私の現在のコードは次のとおりです。

struct DataToPass
{
   int field;
}

delegate void Caller(DataToPass data);

public void Call()
{
    DataToPass data = new DataToPass();
    data.field = 12345;

    IntPtr callptr = new IntPtr(myprocess.Modules[0].BaseAddress.ToInt32() + 0x3A5582);
    Caller call = (Caller)Marshal.GetDelegateForFunctionPointer(callptr, typeof(Caller));
    call(data);
}

しかし、プログラムを実行するとエラーが発生します:

タイプ 'System.AccessViolationException' の未処理の例外が testcall.exe で発生しました

4

1 に答える 1