调用正在运行的进程的方法

时间:2013-09-08 17:08:25

标签: c#

如果我知道我想在另一个进程(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”类型异常

1 个答案:

答案 0 :(得分:6)

您正在调整远程进程中方法的地址,并尝试调用流程中位于同一地址的任何内容。你真的很幸运,你有一个AccessViolation。

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