欢迎来到天天文库
浏览记录
ID:51713125
大小:37.19 KB
页数:3页
时间:2020-03-15
《系统实际可扩展的内存.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、win732位其实早就支持128G内存,只是微软故意限制罢了操作系统, 内存, Windows, 逻辑推理, 源代码如何证明这个事情呢,最终证据这种东西,除非把Windows源代码放到你面前,否则一切证据都是浮云。不过呢,我还是可以给你证明32位操作系统能完全利用4G以上内存,至于你看不看得懂和相不相信,就不是我能决定的了。现在我从三个方面给你证明。分别是逻辑推理、内部原理、自己动手。首先,从逻辑推理的角度看。首先我们知道,Windows内核的实体是ntoskrnl.exe(当然还可能是ntkrnlpa.exe,ntkrnlmp
2、.exe,ntkrpamp.exe),操作系统的基本机制在Kernel层实现,内存管理器在Executive层实现。换句话说,操作系统能识别和利用多少内存是内核决定的。首先承认一个事实。32位WindowsClient版本,例如xp/vista/7,在正常情况下最大只能识别4G内存。而同样是32位的WindowsServer版本,例如2000/2003/2008却可以识别高达128G的内存。你可能说内核不一样,那么以WindowsServer2008为例,其内核和WindowsVistaSP1一模一样(这种常识就不要找我要证据了
3、,请自己查微软知识库或自己试验)。为何一个不支持4G另一个又支持呢?这显然不是32位操作系统本身的技术限制,肯定是其他方面的限制。这样我们就从逻辑推理的方法推断出32位操作系统肯定是支持4G以上内存的。那么,到底是什么因素限制了32位Client版本Windows的可用内存大小呢?下面从内部原理的角度分析。很多人说32位操作系统不支持4G以上内存的理由是:32位处理器寻址能力有限,只能寻2的32次方那么多址,正好4G。那么,说这句话的人,请你告诉我,什么是“址”?难道是物理地址吗?错!这里的“址”,指的是虚拟地址。在Window
4、sNT内核中,进程之间是相互隔离的,各个进程拥有独立的“地址空间”,32位操作系统中,每个进程拥有独立的4GB虚拟地址。注意是每个进程的地址空间容量只有4G,而不是总的物理内存大小只有4G,请区分清楚!用户态应用程序无需访问真实的物理地址,而是通过访问虚拟地址,接受操作系统的调度,经过翻译后访问真实的物理地址。这是操作系统内存管理的精髓。事实上,早在英特尔奔腾2的时代,处理器就从硬件层面支持了物理地址扩展(PAE)。页式地址转换技术又原来的两级页表变成了三级,这样就可以让虚拟地址映射到更多的物理地址。WindowsNT内核中,早
5、就原生支持了PAE。Windows安装程序会自动选择内核的PAE版本ntkrnlpa.exe或ntkrpamp.exe。所以,Windows根本就是真真正正支持4G以上内存的操作系统。那么,WindowsNT6.x是怎样限制可用内存最大容量的呢?事实上,Windows的许可信息保存在了注册表HKEY_LOCAL_MACHINESystemControlSet001ControlProductOptions中,在Windows启动过程中,ZwQueryLicenseValue被调用,用以读取ProductPolicy中的Ke
6、rnel-WindowsMaxMemAllowedx86,这个值限定了特定版本的Windows能够使用的最大物理内存。我们看一下内核ntkrnlpa.exe的部分反汇编结果:7Cxx jl default8B45FC mov eax,dwordptr[ebp-4]85C0 test eax,eax74yy je defaulteax寄存器储存了ZwQueryLicenseValue的结果,根据查询到的版本许可,超过限制的内存部分将直接被ntos吃掉。你可能会想修
7、改注册表键值ProductPolicy来突破限制,不过很遗憾,微软早就防着你这一手呢,ExGetLicenseTamperState/ExSetLicenseTamperState会检查LicenseValue是否被篡改。不过如果Patch内核,直接修改ntkrnlpa.exe,是可以绕过检查,完全利用到4G以上内存的。这也是现在市面上一些所谓“破解”的原理。最后,我们自己动手亲自看看。这里需要用到微软出品的调试器windbg。比如我的机器安装4G内存,Windows显示可用内存2.98G。我们用windbg来看看怎么回事。lk
8、d>ddMmHighestPhysicalPage8088b124 000bf7ff000bf3990000004000000000lkd>ddMmNumberOfPhysicalPages8088b128 000bf39900000040000000007
此文档下载收益归作者所有