gpt4 book ai didi

c++ - 有关我的程序正在使用的虚拟内存的信息?

转载 作者:行者123 更新时间:2023-11-30 05:27:56 25 4
gpt4 key购买 nike

有什么方法可以获得有关我的应用程序正在使用的虚拟内存的信息?

据我所知,程序使用的内存有几个段,例如代码段、数据段和堆、栈等。

有没有办法获取有关这些段开始和结束的地址的信息?

为了提供一些上下文,我正在尝试绘制一个图像,其中包含我的程序的虚拟内存的可视化表示(一种图形)。所以我需要不同段的开始和结束地址,如果可能的话,我需要一种方法来确定一个地址是否是当前正在使用的内存。

顺便说一句,我在 Windows 上使用 C++。

最佳答案

您可以通过调用VirtualQueryEx 来查询进程的内存布局。它返回您想要的内存映射布局。

返回的 MEMORY_BASIC_INFORMATION 内存部分列表及其保护属性。

但是,机器根据其性质(代码、数据、rodata、bss、堆等)处理保护属性,您只能猜测它们:

  • PAGE_EXECUTE:代码
  • PAGE_READONLY: rodata
  • PAGE_READWRITE:数据、bss、堆、栈
  • PAGE_WRITECOPY:数据、bss、堆、栈

但是,如果进程自己定制了 VirtualAllocate 或文件映射,上述猜测将不可靠,为了提高准确性,您还可以使用 GetModuleFileName 查询可执行文件名称并解析文件,然后与表对比(注意地址空间随机化)

关于c++ - 有关我的程序正在使用的虚拟内存的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009927/

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