Windows下系统保留内存研究

在进入Windows之后,Runtime Service 和 ACPI Table之类的仍然存在于内存中,但是Windows没有提供标准的方法进行访问。用户能获得的只有经过包装之后 ACPI Table (实际上是来自注册表) ,或者根本就没有提供(比如:Runtime Service Table)。如果想再次获得这样的信息,只能通过扫描系统保留内存来完成。但是 Windows 没有提供类似 E820 的机制告知用户(应该是因为这种信息对于用户来说是根本无需了解的)。经过一段时间的研究,找到了在 Windows下获得系统保留内存的方法:在注册表 HKLM\HARDWARE\RESOURCEMAP\System Resources\Loader Reserved的位置。以我目前使用的笔记本电脑为例,打开这个位置之后可以看到

在双机进入即可看到保留内存的信息:

此外,Device Manager中也会给出硬件占用的内存地址,但是这个和系统的保留内存是没有任何关系的。

前面给出了注册表的位置,接下来就是如何解析的问题。

接下来是下面这个结构体【参考2】

继续解析【参考3】。其中 ULONG 占用 4BYTES;USHORT占用2BYTES;UCHAR占用1BYTES.

USHORT Version ==00

USHORT Revision ==00

Count=0x19

接下来就是每一个保留的内存情况

根据上面的方法即可获得当前系统中 Loader 通知系统的 Reserved Memory

对于 type的定义在【参考5】

有了上面的基础就可以编写完整的程序获得系统保留内存:

运行结果如下(运行的机器和之前做分析的不同,所以 Counter数量不同)

参考:

1. https://msdn.microsoft.com/en-us/library/windows/hardware/ff541994(v=vs.85).aspx

2. https://msdn.microsoft.com/en-us/library/windows/hardware/ff541954(v=vs.85).aspx

3. https://msdn.microsoft.com/en-us/library/windows/hardware/ff541981(v=vs.85).aspx

4. https://msdn.microsoft.com/en-us/library/windows/hardware/ff541977(v=vs.85).aspx

5. https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/wdm/ns-wdm-_cm_partial_resource_descriptor

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G1VIQR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券