|
作者: univert 時間: 2010-10-7 22:05:54 標(biāo)題: patch一個字節(jié), WINXP32 支持>=4GB 之前有人分析了Vista/win7 的memory limit http://www./viewer.htm?doc=notes/windows/license/memory.htm 現(xiàn)在來看看winxp啊,其實是一樣的啊 ![]() 反編譯結(jié)果有一個private的函數(shù)(symbol里面沒有)來進(jìn)行check的,IDA Pro 里可以空過xref ExVerifySuite來定位這個匿名函數(shù),函數(shù)的源代碼在這里,不過那個好像是DataCenter的源代碼,XP的源代碼略有差異,不過大同小異 這個函數(shù)在MmInitSystem里面被調(diào)用,用來刪除系統(tǒng)超過4Gb的那些頁面 這里有兩個限制值,一個是MaxPages也就是物理頁面總數(shù),一個是HighestPhysicalAddress是最高頁面地址值 winxp32默認(rèn)這兩個值都是0x100000,也就是4G,但是由于部分物理頁面的地址由于bios Memory remap而存在>4G的空間,HighestPhysicalAddress限制了這部分地址空間,所以有4Gb的機(jī)子只有大概3-3.25G的實際空間 INIT:005BB492 MiCheckPaeLicense proc near INIT:005BB492 INIT:005BB492 var_C = dword ptr -0Ch INIT:005BB492 HighestPhysicalAddress= dword ptr -8 INIT:005BB492 MaxPages = dword ptr -4 INIT:005BB492 INIT:005BB492 mov edi, edi INIT:005BB494 push ebp INIT:005BB495 mov ebp, esp INIT:005BB497 sub esp, 0Ch INIT:005BB49A push ebx INIT:005BB49B push esi INIT:005BB49C push edi INIT:005BB49D mov ebx, 100000h 默認(rèn)是4GB INIT:005BB4A2 xor edi, edi INIT:005BB4A4 push 7 ; SuiteType 檢查是否DataCenter INIT:005BB4A6 mov esi, eax INIT:005BB4A8 mov [ebp+MaxPages], ebx INIT:005BB4AB mov [ebp+HighestPhysicalAddress], edi HighestPhysicalAddress初始為0即沒有限制,DataCenter下該值為零 INIT:005BB4AE call _ExVerifySuite@4 ; ExVerifySuite(x) INIT:005BB4B3 cmp al, 1 改這里就可以啦 cmp al,0 INIT:005BB4B5 jnz short loc_5BB4D2 INIT:005BB4B7 cmp [esi+64h], edi 檢查是否打開/3GB INIT:005BB4BA jnz short loc_5BB4C5 INIT:005BB4BC mov [ebp+MaxPages], 1000000h DataCenter是64GB INIT:005BB4C3 jmp short loc_5BB509 INIT:005BB4C5 ; --------------------------------------------------------------------------- INIT:005BB4C5 INIT:005BB4C5 loc_5BB4C5: ; CODE XREF: MiCheckPaeLicense+28j INIT:005BB4C5 mov eax, 400000h INIT:005BB4CA mov [ebp+MaxPages], eax INIT:005BB4CD mov [ebp+HighestPhysicalAddress], eax INIT:005BB4D0 jmp short loc_5BB509 INIT:005BB4D2 ; --------------------------------------------------------------------------- INIT:005BB4D2 INIT:005BB4D2 loc_5BB4D2: ; CODE XREF: MiCheckPaeLicense+23j INIT:005BB4D2 cmp ds:_MmProductType, 690057h INIT:005BB4DC jz short loc_5BB4F2 INIT:005BB4DE push 1 ; SuiteType INIT:005BB4E0 call _ExVerifySuite@4 ; ExVerifySuite(x) INIT:005BB4E5 cmp al, 1 INIT:005BB4E7 jnz short loc_5BB4F2 INIT:005BB4E9 mov [ebp+MaxPages], 800000h INIT:005BB4F0 jmp short loc_5BB509 INIT:005BB4F2 ; --------------------------------------------------------------------------- INIT:005BB4F2 INIT:005BB4F2 loc_5BB4F2: ; CODE XREF: MiCheckPaeLicense+4a INIT:005BB4F2 ; MiCheckPaeLicense+55 INIT:005BB4F2 push 0Ah ; SuiteType INIT:005BB4F4 call _ExVerifySuite@4 ; ExVerifySuite(x) INIT:005BB4F9 cmp al, 1 INIT:005BB4FB jnz short loc_5BB506 INIT:005BB4FD mov [ebp+MaxPages], 80000h INIT:005BB504 jmp short loc_5BB509 INIT:005BB506 ; --------------------------------------------------------------------------- INIT:005BB506 INIT:005BB506 loc_5BB506: ; CODE XREF: MiCheckPaeLicense+69j INIT:005BB506 mov [ebp+HighestPhysicalAddress], ebx XP下0x100000 INIT:005BB509 INIT:005BB509 loc_5BB509: ; CODE XREF: MiCheckPaeLicense+31j INIT:005BB509 ; MiCheckPaeLicense+3Ej ... INIT:005BB509 add esi, 8 INIT:005BB50C mov eax, [esi] INIT:005BB50E xor ebx, ebx INIT:005BB510 cmp eax, esi INIT:005BB512 mov [ebp+var_C], esi INIT:005BB515 jz short loc_5BB583 [attach]3198[/attach] 作者: Mancity 時間: 2010-10-7 22:15:22 “支持>=4GB”的意思是等于4G還是大于等于4G? 作者: univert 時間: 2010-10-7 22:16:33 引用第1樓Mancity于2010-10-07 19:15發(fā)表的 : 作者: Mancity 時間: 2010-10-7 22:20:59 2^32=4 294 967 296 =4G 32位CPU的尋址極限能突破? 好像在《Windows驅(qū)動開發(fā)技術(shù)詳解》看到過詳細(xì)的解釋,32位系統(tǒng)所能用的物理內(nèi)存極限應(yīng)該只能到4G 作者: univert 時間: 2010-10-7 22:23:52 引用第3樓Mancity于2010-10-07 19:20發(fā)表的 : 希望你先看看這里http://www./viewer.htm?doc=notes/windows/license/memory.htm了解一下背景,呵呵 作者: Mancity 時間: 2010-10-7 22:28:20 That 32-bit editions of Windows Vista are limited to 4GB is not because of any technical constraint on 32-bit operating systems. The 32-bit editions of Windows Vista all contain code for using physical memory above 4GB. Microsoft just doesn’t license you to use that code. 好奇怪。。 作者: killvxk 時間: 2010-10-7 22:47:55 確實可行~ 作者: univert 時間: 2010-10-7 22:54:15 用Vmware 測試8GB,XPSP2效果 [attach]3199[/attach] 作者: achillis 時間: 2010-10-7 23:00:05 8GB,很威猛~~ 作者: Mancity 時間: 2010-10-7 23:01:07 強(qiáng)大,這個時候CPU還是運(yùn)行在x86吧 作者: univert 時間: 2010-10-7 23:12:50 引用第9樓Mancity于2010-10-07 20:01發(fā)表的 : 作者: Mancity 時間: 2010-10-8 01:31:01 http://baike.baidu.com/view/493711.htm 原來是這個,那書上都沒提到PAE…… 作者: Mancity 時間: 2010-10-8 01:36:50 不支持PAE的處理器這個方法應(yīng)該無效。 作者: killvxk 時間: 2010-10-8 02:26:49 弄真機(jī)實驗吧 作者: Mancity 時間: 2010-10-8 03:53:49 發(fā)現(xiàn)一個問題,單進(jìn)程還是不能超過2GB,囧。。 作者: Mancity 時間: 2010-10-8 04:04:57 實機(jī)上測試還發(fā)現(xiàn)有好多驅(qū)動不能正常工作在啟用了PAE的內(nèi)核下 作者: jerrynpc 時間: 2010-10-8 11:36:49 windbg無法查到此函數(shù)?
作者: achillis 時間: 2010-10-8 15:21:17 引用第16樓jerrynpc于2010-10-08 08:36發(fā)表的 : 私有符號,Windbg是看不到的,按樓主說的方法找吧~ 作者: rickywong 時間: 2010-10-10 12:45:51 實用性不大,和4M內(nèi)存粒度一樣,很多驅(qū)動都不支持 作者: perfectdark 時間: 2010-10-10 17:14:24 兼容性如何,以前我改過,但是藍(lán)屏了,不知道是否是我改錯了, 還是驅(qū)動不兼容 作者: perfectdark 時間: 2010-10-10 18:48:44 又改了一次,還是藍(lán)屏了 作者: wg2001wg 時間: 2010-10-10 21:39:08 確定不是ps上的?? 作者: univert 時間: 2010-10-11 16:43:27 可以用的啊,我的4G機(jī)子已經(jīng)跑了3天了,沒問題 有些驅(qū)動確實有問題,聲明物理內(nèi)存變量的時候沒有用PHYSICAL_ADDRESS 宏,而是自己用int . long 如果該物理內(nèi)存地址>4G的話就會出問題了,PHYSICAL_ADDRESS 其實是__int64 作者: youxyo 時間: 2010-10-13 02:03:48 用過。。偶爾藍(lán)屏。。。偶爾啟動不了 |
|
|