c#通过内存地址调用方法
c# Call a method by memory address
我试图在 C# 中的指定内存地址调用一个函数,这是我在 C 中的处理方式:
typedef void _do(int i);
auto doActor = (_do*)0xAAAABEEF;
doActor(1);
如果可能,如何在 C# 中复制此行为? C# 的新手,感谢所有帮助。
对我的情况进行更深入的解释:我正在尝试创建一个工具来帮助我在可执行文件中自动执行某些进程。我反编译了主要 API 的程序集,并通过拦截我自己的网络 packets/spoofing 添加了我的功能(大部分)。我无法控制客户端的事物,存储在我无法 de-/recompile 的混淆程序集中。我很少需要从这个混淆的程序集中调用一个或两个函数,我使用调试器找到了那些相关函数的内存地址,但不知道从这里在 c# 中去哪里。
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 存在一些限制。我建议你看看at the documentation.
如果您无法使用早于 4.5 的 .NET 版本,您将不得不使用不同版本的 GetDelegateForFunctionPointer
:
var doActor = (_do)Marshal.GetDelegateForFunctionPointer(ptr, typeof(_do));
我试图在 C# 中的指定内存地址调用一个函数,这是我在 C 中的处理方式:
typedef void _do(int i);
auto doActor = (_do*)0xAAAABEEF;
doActor(1);
如果可能,如何在 C# 中复制此行为? C# 的新手,感谢所有帮助。
对我的情况进行更深入的解释:我正在尝试创建一个工具来帮助我在可执行文件中自动执行某些进程。我反编译了主要 API 的程序集,并通过拦截我自己的网络 packets/spoofing 添加了我的功能(大部分)。我无法控制客户端的事物,存储在我无法 de-/recompile 的混淆程序集中。我很少需要从这个混淆的程序集中调用一个或两个函数,我使用调试器找到了那些相关函数的内存地址,但不知道从这里在 c# 中去哪里。
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 存在一些限制。我建议你看看at the documentation.
如果您无法使用早于 4.5 的 .NET 版本,您将不得不使用不同版本的 GetDelegateForFunctionPointer
:
var doActor = (_do)Marshal.GetDelegateForFunctionPointer(ptr, typeof(_do));