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);
}

但是当我运行程序时出现错误:

testcall.exe 中发生了“System.AccessViolationException”类型的未处理异常

4

1 回答 1

6

您正在获取远程进程中方法的地址,并尝试调用进程中发生在同一地址中的任何内容。实际上,您很幸运遇到了 AccessViolation。

首先,您必须决定该方法应该在调用进程还是远程进程中运行。如果它应该在调用进程中运行,那么只引用方法所在的 DLL/EXE 并调用它会更容易。但是,如果您希望它在远程进程中运行,您可以使用某种形式的远程处理,例如 WCF。

于 2013-09-08T17:25:54.860 回答