Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: guozf   发起时间: 2009-08-05 18:35 下午   回复: 8

Print Search
帖子排序:    
   2009-08-05, 18:35 下午
aeezguo 离线,最后访问时间: 2010/4/21 7:25:59 guozf

发帖数前10位
男
注册: 2008-12-06
HK
发 贴: 68
物理内存
Reply Quote
请问如何获得物理内存的大小呢?
在boot.ini里可以限制Windows可以使用的最大内存,但是如何得到真正的物理内存大小呢?
请指教实现方法!

IP 地址: 已记录   报告
   2009-08-05, 22:49 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 物理内存
Reply Quote
内核中的全局变量MmNumberOfPhysicalPages标志着物理内存的大小,以页为单位,x86架构中,即以4KB为单位。

内核函数NtQuerySystemInformation(SystemBasicInformation, ...)可以获取MmNumberOfPhysicalPages的值。

SDK中提供了一个API来调用这个内核服务,目前不推荐使用,但是仍可以使用。
IP 地址: 已记录   报告
   2009-08-06, 09:14 上午
aeezguo 离线,最后访问时间: 2010/4/21 7:25:59 guozf

发帖数前10位
男
注册: 2008-12-06
HK
发 贴: 68
Re: 物理内存
Reply Quote
问题:
1. 这样的方法得到的是真正的物理内存大小,还是Windows使用的物理内存的大小?
2. NtQuerySystemInformation这个函数好像NTDLL和NTOSKRNL都有export,一个是从User Mode调用,一个从Kernel Mode调用。但是结果会不会有什么不同?
3. WDK或者DDK中为什么查不到NtQuerySystemInformation或者ZWQuerySystemInformation。但是我用dependency walker确实有看到这两个函数。
IP 地址: 已记录   报告
   2009-08-06, 09:27 上午
aeezguo 离线,最后访问时间: 2010/4/21 7:25:59 guozf

发帖数前10位
男
注册: 2008-12-06
HK
发 贴: 68
Re: 物理内存
Reply Quote
另外的一个问题是:
NtQuerySystemInformation或者ZWQuerySystemInformation有什么区别么?

多谢Raymond的回答
IP 地址: 已记录   报告
   2009-08-06, 14:09 下午
aeezguo 离线,最后访问时间: 2010/4/21 7:25:59 guozf

发帖数前10位
男
注册: 2008-12-06
HK
发 贴: 68
Re: 物理内存
Reply Quote
我的电脑物理内存为1G。
测试如下:
1。 修改Boot.ini
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional 512M" /noexecute=optin /fastdetect /maxmem=512
2. 分别用选项1和选项2启动
3. 调用User mode的函数NtQuerySystemInformation来查看物理内存的大小
选项1:1G
选项2:512M

结论:NTDLL的函数NtQuerySystemInformation不能获得真正的物理内存大小。
IP 地址: 已记录   报告
   2009-08-06, 14:15 下午
zhukun28 离线,最后访问时间: 2017/2/15 4:10:25 benlong

发帖数前100位
注册: 2008-10-01
发 贴: 11
Re: 物理内存
Reply Quote
Nt和Zw的区别可以看看这篇文章
http://advdbg.com/download/storeshow.aspx?id=cba1a009-706b-46b9-9cd6-aab77e2b608c
IP 地址: 已记录   报告
   2009-08-06, 23:07 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 物理内存
Reply Quote
用个时髦的词,晕。原来楼主想知道主板上到底插了多少内存,是写BIOS么?通常BIOS负责做这个事,要根据内存的类型(DDR,DDR2等),基于一种名为SPD(Serial Presense Detect)的协议去检测,然后再根据内存类型和具体协议来计算。下面的网页有一个比较老的SPEC:
http://www.datasheetcatalog.org/datasheet/SamsungElectronic/mXqququ.pdf
IP 地址: 已记录   报告
   2009-08-07, 22:51 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 物理内存
Reply Quote
BIOS会把检测到的部分结果登记到北桥的寄存器中,因此如果是操作系统阶段需要,那么读取寄存器是比较快捷的方式,不过不确认这些寄存器的位置是否公开了。

IP 地址: 已记录   报告
   2009-08-10, 09:42 上午
aeezguo 离线,最后访问时间: 2010/4/21 7:25:59 guozf

发帖数前10位
男
注册: 2008-12-06
HK
发 贴: 68
Re: 物理内存
Reply Quote
嗯,好像看到一个工具可以读到这个值,不知道是怎么做的.
多谢Raymond.
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 物理内存

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.