c#通过内存地址调用方法

时间:2018-08-23 17:56:25

标签: c# memory methods call

我正在尝试在C#中的指定内存地址处调用函数,这是我在C中的处理方式:

typedef void _do(int i);
auto doActor = (_do*)0xAAAABEEF;
doActor(1);

如果可能,如何在C#中复制此行为?对于C#来说是非常新的,感谢所有帮助。

更深入地说明我的情况:我正在尝试创建一个工具,该工具可以帮助我自动执行可执行文件中的某些进程。我反编译了主要API的程序集,并通过拦截网络数据包/欺骗自己的功能来添加了我的功能(大部分情况下)。我无法控制存储在无法反编译的混淆程序集中的客户端。我很少需要从这个混淆的程序集中调用一个或两个函数,并且我使用调试器找到了这些相关函数的内存地址,但是不知道在c#中从哪里可以找到。

1 个答案:

答案 0 :(得分:0)

与C#中的C函数指针最接近的等效项是委托。代表是托管的,但您可以使用YYYY is the year MM is the month DD is the day NNNNNNN is a sequence/random number 方法将它们相互转换:

Marshal.GetDelegateForFunctionPointer

但是,与此API有一些限制。我建议您看看at the documentation

如果您使用的.NET版本早于4.5,那么您将不得不使用其他版本的public delegate void _do(int i); // the delegate type var ptr = new IntPtr(0xAAAABEEF); var doActor = Marshal.GetDelegateForFunctionPointer<_do>(ptr); doActor(1);

GetDelegateForFunctionPointer