c# 按内存地址调用方法



我正在尝试在 c# 中调用指定内存地址的函数,以下是我在 C 中的做法:

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

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

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

C# 中最接近的等效项是委托。委托是托管的,但您可以使用Marshal.GetDelegateForFunctionPointer方法将一个委托与另一个进行转换:

public delegate void _do(int i); // the delegate type
var ptr = new IntPtr(0xAAAABEEF);
var doActor = Marshal.GetDelegateForFunctionPointer<_do>(ptr);
doActor(1);

但是,此 API 存在一些限制。我建议你看看文档。

如果您坚持使用早于 4.5 的 .NET 版本,则必须使用不同版本的GetDelegateForFunctionPointer

var doActor = (_do)Marshal.GetDelegateForFunctionPointer(ptr, typeof(_do));

最新更新