我想这样做的原因是:我有 ac#winforms 应用程序和一个将被注入另一个进程的 c++ DLL。从 c# 应用程序中,我想使用远程进程地址空间内的非成员函数的地址调用 CreateRemoteThread()。我设置了一个 MemoryMappedFile 以允许 DLL 和应用程序共享一个包含我想要的任何变量的结构,目前它只包含:
DWORD AddressOfDllFunction;
如果 DWORD 不是在这里使用的最佳类型,那么我可以使用不同的类型,我只是想确保变量中有足够的空间来保存指针,结构的 C# 版本包含相同的变量,除了它的类型是 IntPtr。远程进程是一个 32 位进程,但如果我可以免费获得 64 位支持,那也很好。我试着做:
struct->AddressOfDllFunction = DllFunction;
但这不起作用。我尝试使用它和一些类型转换无济于事。我所做的所有搜索都是人们希望做同样的事情,但我收集到的成员函数是不可能的,因为您需要对象实例和函数的地址。我觉得这很简单,而且我遗漏了一些明显的东西,我对 c++ 很陌生,虽然我已经使用 .Net 很长时间了,但我几乎从未使用过指针。总而言之,当从 C# 中的 MMF 读取时,我需要 structs 数据类型中的变量能够自动解释为 IntPtr,并且我需要该变量的内容是远程进程地址中 DLL 函数的地址空间。
感谢您的阅读,感谢任何和所有建设性的帮助!