Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c将大量内存写入文件,反之亦然_C# - Fatal编程技术网

C# c将大量内存写入文件,反之亦然

C# c将大量内存写入文件,反之亦然,c#,C#,我想把一个游戏的一大块内存复制到一个文件中作为备份。 我相信我必须使用filestream写入文件,使用memorystream再次从文件写入内存 最好的方法是什么? 我得到0x140000000作为起始地址,0x14A8A8200大小:0a8a8200 这是一个相当多的复制,所以我不知道如何开始 我猜开始到结束地址和文件流写入的字节数组 非常感谢您的提示和帮助 编辑: 我注意到作弊引擎有一个名为save/load memory region的函数您需要p/调用本机API来完成此操作。那个API

我想把一个游戏的一大块内存复制到一个文件中作为备份。 我相信我必须使用filestream写入文件,使用memorystream再次从文件写入内存

最好的方法是什么? 我得到0x140000000作为起始地址,0x14A8A8200大小:0a8a8200 这是一个相当多的复制,所以我不知道如何开始

我猜开始到结束地址和文件流写入的字节数组

非常感谢您的提示和帮助

编辑:
我注意到作弊引擎有一个名为save/load memory region的函数

您需要p/调用本机API来完成此操作。那个API是。您无法从普通用户模式代码中读取内存,因为内存处于不同的进程中,因此受到虚拟内存系统的保护。因此,您需要操作系统的帮助,这就是ReadProcessMemory为您所做的

您还需要获得进程的句柄。这是我的要求。要成功调用ReadProcessMemory,您需要包括PROCESS_VM_READ,如中所述:

句柄必须具有对进程的进程\虚拟机\读取访问权限


对ReadProcessMemory的调用还需要指向存储返回缓冲区的内存块的指针。您可以使用Marshal.AllocHGlobal,或者更容易地分配一个字节数组并将其固定。

还没有开始,因为我一直在研究如何将内存块转换为字节数组,我在c语言方面没有那么先进,我试图在脑海中想象它first@BertPauwels:您在哪里找到这些地址?任务管理器应用程序,我用调试器仔细检查了它,地址/大小都正确了。注意:PInvoke不是C/.Net中最简单的主题。。。您最好使用现有的解决方案来作弊…@AlexeiLevenkov在p/invoke方面提出了一个很好的观点。如果你开始用C写这篇文章,当它不起作用时,你会想,是我弄错了p/invoke,还是API调用。因此,我总是从C++代码开始,来了解需要什么API调用。完成后,将其转换为C和p/invoke。谢谢您的帮助。非常感谢