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

时间:2016-05-03 16:51:43

标签: c++ windows memory virtual-memory

有没有办法可以获取我的应用程序正在使用的虚拟内存的信息?

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

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

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

我在windows btw上使用c ++。

1 个答案:

答案 0 :(得分:1)

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

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

然而,该机器不是通过其性质(代码,数据,rodata,bss,堆等)来处理保护属性,你只能猜测

  • PAGE_EXECUTE:代码
  • PAGE_READONLY:rodata
  • PAGE_READWRITE:数据,bss,堆,堆栈
  • PAGE_WRITECOPY:data,bss,heap,stack

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