如果我知道我想在另一个进程(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”类型异常
答案 0 :(得分:6)
您正在调整远程进程中方法的地址,并尝试调用流程中位于同一地址的任何内容。你真的很幸运,你有一个AccessViolation。
首先,您必须确定该方法是应该在调用进程还是远程进程中运行。如果它应该在调用进程中运行,则更容易引用方法所在的DLL / EXE并调用它。但是,如果您希望它在远程进程中运行,您可以使用某种形式的远程处理,例如WCF。