gpt4 book ai didi

c++ - .NET 查看其他应用程序的内存

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:33 24 4
gpt4 key购买 nike

所以我有两个协同工作的应用程序。一个是使用自定义内存管理器用 native c++ 编写的。该内存管理器管理从起始地址到 startAddress + size 的连续字节 block 。我还有一个 WPF 应用程序,它读取文本文件(这只是内存管理器中倒入文本文件的字节)并显示有关它的各种统计信息。我想知道是否有一种方法可以在 WPF 应用程序中实时查看 native c++ 应用程序的内存。所以一些伪逻辑可能是:

  • native 应用程序可以以某种方式公开池的起始地址和大小
  • WPF 应用程序通过起始地址加上大小从该起始地址获取所有字节

我研究了 .NET 中的 Process 类,但没有看到 MemoryPool 之类的东西,我认为该对象的 StartAddress 指向应用程序的非常开头,而不是第一个已分配堆。

如有任何帮助,我们将不胜感激!

最佳答案

Damien_The_Unbeliever 在评论中发布了不可避免的最佳解决方案。我很抱歉没有早点发布这个,以防其他人遇到这个问题。这个想法是使用 memory mapped files使一 block 内存在您的应用程序之外可见。本质上,您创建一个内存块并为其指定一个字符串名称(标识符)。任何其他知道此标识符的应用程序都可以读取该内存块,就好像它是它们自己的内存块一样(假设它们正在使用内存映射文件来查看内存,因为它不仅仅是本质上可见的)。需要注意的是,读取内存的应用程序必须能够解析内存并理解它。

我用它在 C# 中为我的引擎创建了一个实时内存查看器。该引擎有一个底层分配器和内存管理器,它现在写入一个内存块,该内存块也由内存映射文件指向。 C# 应用程序以给定的时间间隔读取此内存,并以相关方式向用户(开发人员)显示它。最好的部分是,因为 native 端根本不需要更改就可以使用此实现,所以这根本不会影响应用程序的性能。

关于c++ - .NET 查看其他应用程序的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com