蓝色动力网络

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3059|回复: 0

[转帖] 破解微软系统限制 实战32位系统下用6GB

[复制链接]
发表于 2010-2-6 18:10:52 | 显示全部楼层 |阅读模式
虽然用上4GB内存的消费者已经不在少数,但他们还是重复问人家,为什么家里的WinXP系统只能辨别出3.25GB。究竟用什么方法才能将4GB全部用满呢?如今三通道内存也开始普及,有朋友也使用6GB内存容量。对于这么大容量的机器,不能利用光内存容量的确让人挺郁闷的。

宇瞻三通道6GB DDR3内存
  虽然网上很多玩家写了一些文章建议大内存用户们转向64位Windows平台,不过,不少人仍然喜欢留在32位世界,有什么方法可以让他们也能应用4GB以及4GB以上的内存呢?为什么同样是32位,服务器版Windows就能使用更大的内存呢?本篇文章就用跟大家解释一下这个问题。
  
  典型的3.25GB容量

32位操作系统并不意味着只能使用4GB内存
  在继续之前,首先来看一些各种Windows对内存支持的限制:


Windows Vista、Windows Server 2003、Windows Server 2008
操作系统内存支持对比

操作系统内存容量
Windows Server 2003 Web Edition2GB
Windows Vista Starter
Windows Vista Home Basic
Windows Vista Home Premium
Windows Vista Business
Windows Vista Enterprise
Windows Vista Ultimate
Windows Server 2003 Standard Edition
Windows Server 2003 R2 Standard Edition
Windows Server 2003 Standard Edition SP1
Windows Small Business Server 2003
Windows Home Server
Windows Storage Server 2003
4GB
Windows Storage Server 2003 Enterprise Edition
Windows Vista Home Basic x64
8GB
Windows Vista Home Premium x64
Windows Server 2003 Standard Edition x64
16GB
Windows Server 2003 Enterprise Edition
Windows Server 2003 R2 Standard Edition x64
Windows Server 2003 Standard Edition SP1 x64
Windows Compute Cluster Server 2003 x64
Windows Web Server 2008 x64
Windows Server 2008 Standard x64
32GB
Windows Server 2003 Enterprise Edition SP2
Windows Server 2003 Enterprise Edition x64
Windows Server 2008 Enterprise
Windows Server 2008 Datacenter
64GB
Windows Server 2003 Datacenter Edition
Windows Vista Business x64
Windows Vista Enterprise x64
Windows Vista Ultimate x64
128GB
Windows Server 2003 Datacenter Edition x64512GB
Windows Server 2003 R2 Enterprise Edition x64
Windows Server 2003 Enterprise Edition SP1 x64
Windows Server 2003 R2 Datacenter Edition x64
Windows Server 2003 Datacenter Edition SP1 x64
1TB
Windows Server 2003 Enterprise Edition SP2 x64
Windows Server 2003 Datacenter Edition SP2 x64
Windows Server 2008 Enterprise x64
Windows Server 2008 Datacenter x64
Windows Server 2008 IA64
2TB
  特别说明的是,Windows 7将会支持最多192GB的内存(64位版本),服务器版本不会叫做Windows 7 Server,而是叫做Windows Server 2008 R2。 
  Vista SP1的幻象:插有多少内存,Vista SP1就会显示多少,不过任务管理器里面只会有3.25GB左右
  实际上,Windows Vista SP1和Windows Server 2008的很多核心文件都是一致的(2008推出的时候SP1已经发布了,因此直接就集成了SP1,或许准确地,所有的2008都应该叫做Windows Server 2008 SP1),也许我们能通过简单的方法让32位Vista能像32位2008一样,可以使用超过4GB的内存。
  很幸运,和XP不同,32位Vista的4GB限制确实不是核心代码上的限制,而是一些其他的限制:在系统启动的时候,将会读取一个值,这个值最终确定了用户可以使用的内存。这个值叫做Kernel-WindowsMaxMemAllowedx86,通过一个未公开的函数ZwQueryLicenseValue来读取,这个值代表着可用的最大内存,如32位Windows上总是0x1000,单位是MB,也就是代表着4GB。
  附概念澄清:32位操作系统并不意味着只能使用4GB内存  
   32位XP/2003操作系统通过PAE来支持4GB以上的内存,因此具有“物理地址扩展”的字样
   但是32位Vista/2008内部直接使用64位PTE,因此就没有了PAE相关字样
  在现代操作系统上,如32位的Windows Vista/7,为了实现与64位的兼容(如,为了驱动程序编写的方便),系统使用了64位的PTE(Page Table Entry,分页表)来管理内存,因此它们就和64位版本一样,也能管理和使用更大的内存。


实战最实际:让32位Windows突破4GB的限制
  既然知道了32位Vista通过ZwQueryLicenseValue函数来决定系统能使用多少内存,而不是通过编写内存管理功能时就加上的限制,那么相对来说,让32位Windows4GB的限制就比较简单了。
  启动时系统在NTKRNLPA.EXE内核文件中使用了这样的代码:
Opcode Bytes
操作码
Instruction
汇编指令
[pre]7C xx[/pre][pre]jl      default[/pre]
[pre]8B 45 FC[/pre][pre]mov     eax,dword ptr [ebp-4][/pre]
[pre]85 C0[/pre][pre]test    eax,eax[/pre]
[pre]74 yy[/pre][pre]je      default[/pre]
  执行中,eax寄存器中保存了ZwQueryLicenseValue的状态值,在通常情况下,系统跳转到default代码段,不允许使用超过4GB容量内存,通过简单的修改就可以让系统认为ZwQueryLicenseValue返回128GB的可用容量:
Opcode Bytes
操作码
Instruction
汇编指令
[pre]B8 00 00 02 00 [/pre][pre]mov     eax,00020000h [/pre]
[pre]90[/pre][pre]nop[/pre]
[pre]90[/pre][pre]nop[/pre]
  nop是空操作的意思(no operation),20000h就代表着128GB(16进制值)。以下是上述指令在英文版本Vista上的位置:
Version
版本号
Package
版本
File Offsets
文件偏移量
6.0.6000.16386Windows Vista0x003040B1, 0x003040F2
6.0.6001.18000Windows Vista SP10x00309AA3, 0x00309AE4
为了安全,一般建议,修改后的内核文件名为NTKR128G.EXE
  虽然知道原理之后还有很多操作,如,数字签名等操作,不过这些都是为人熟知,因此已经有不少的补丁实现了该大内存支持修改理论,有一个国内的圣贤实现的版本:
   简单地按下“应用”按钮
   一个新的核心文件就出炉了
 
   该补丁还提供了一个自动修改启动选项以应用NTKR128G.EXE的命令行批处理文件 
   自行进行修改

实战32位系统下用6GB内存
 
  为了安全,这个补丁默认启动正常的核心文件,需要手动选择加入的新选项才能使用NTKR128G.EXE启动
  以下为可选命令:
  启动菜单10秒选择时间:
  bcdedit -timeout 10
  将指定的GUID代表的启动选项设置为第一项,GUID可以通过bcdedit命令显示出来(resumeobject):
  bcdedit -displayorder GUID -addfirst
  修改默认启动为GUID代表的启动选项
  bcdedit -default GUID
  
  6GB容量
  成功之后,系统将可以应用超过4GB以上的内存。

32位系统用4/6GB是不可能变成可能
  总结:除了破解NTKRNLPA.EXE文件之外,以往还有一个方法来应用超过4GB的内存:RAMDISK,通过启动时装载的内核模式驱动,它也能让超过4GB的内存得到一些应用。显然,破解的方法更为灵活一些,不仅仅是RAMDISK才能使用4GB以上的内存。并且破解之后一样可以使用RAMDISK。
  
  32位Windows Vista突破4GB容量限制(也可以应用于Windows 7)
  然而,由于上一页所说的限制,使用64位操作系统仍然是推荐的,不仅仅是为了支持的最大内存容量更大,而是为了更强大的操作系统内部数据结构。
  
  64位系统:系统缓存、分页池和未分页池(较小的系统缓存是因为笔者使用了一个应用软件来限制的缘故)
  系统资源主要有四种:分页池、未分页池、系统分页表和系统缓存,System Cache系统缓存容易理解(用来缓存读取的各种程序/文件),系统分页表则是用来保存所有线程使用到的堆栈(Windows所有的线程都具有自己的堆栈),分页池和未分页池则是所有程序的核心模式组件使用到的内存部分,区别只是未分页池里分配的内存是不能交换到虚拟内存上面的,分页池上的则可以(从而可能保存到磁盘上去,当程序需要这些页面的时候,再读到内存里面来)。
  例如设备驱动就使用未分页池(假如放到虚拟内存并被交换到磁盘上时可能会发生灾难性的后果)。这些资源短缺的时候系统将会发生不可预料的事情,分页池吃紧的时候系统将会频繁地使用虚拟内存,从而不停读写磁盘减低性能,而未分页池吃紧的时候系统多半已经踏入鬼门关了。
  由于这些资源共同占用着相同的内核模式地址空间,因此在32位条件下很受限制,并且稍有不慎就会导致短缺,在64位环境下,这些资源的上限都可以达到128GB,因此系统运行起来会更加稳定,可以支持更多的进程/线程运行——也就是打开更多的窗口,运行更多的程序(从这点上看,32位的Vista也多少具有这些特征,虽然无法突破4GB的限制,不过系统资源的分配没有太过于固定的限制)。






有一定的危险性,实验前请三思!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

蓝色动力网络微信平台
网站管理,业务合作联系邮箱: admin#lansedongli.com    QQ:13412492 限网站业务问题.
网站帐号、密码、密保找回请使用注册邮箱,发送邮件至 password#lansedongli.com ,否则不予受理.
免责声明:本论坛所有文字和图片仅代表其个人观点.
本站某些资料或文章来自于互联网,不代表本站观点,如果侵犯了您的权益,请来信告知,我们会在三天内删除.
为了给大家一个更好的交流场所,请勿在本论坛发表与中华人民共和国法律相抵触的言论,请合作,谢谢!
Copyright © 2007-2019 Corporation Powered by网吧系统 版权所有    转载请注明!
浙ICP备11043737号-1 程序:Discuz! x3.4

湘公网安备 43018102000145号

手机版|Archiver|蓝色动力网络   

快速回复 返回顶部 返回列表