xp sp3关闭PAE(物理内存扩展)

本文记录了作者在调试系统PTE区域过程中遇到的问题及其解决过程。因系统开启了PAE模式导致无法正确获取nt!MmFirstFreeSystemPte的值,通过修改Boot.ini文件关闭PAE模式解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    这几天调试系统PTE区域,在获取nt!MmFirstFreeSystemPte指向的元素时,总无法获得正确的空闲pte值。反汇编nt!MiInitializeSystemPtes函数时发现这样的代码:

80544e35 8d3cf5c0975580  lea     edi,nt!MmFirstFreeSystemPte (805597c0)[esi*8]
80544e3c 8b5704          mov     edx,dword ptr [edi+4]
80544e3f 8845ff          mov     byte ptr [ebp-1],al
80544e42 8b07            mov     eax,dword ptr [edi]
80544e44 b120            mov     cl,20h
80544e46 897df8          mov     dword ptr [ebp-8],edi
80544e49 e8121fffff      call    nt!_aullshr (80536d60)
80544e4e 83f8ff          cmp     eax,0FFFFFFFFh
80544e51 7530            jne     nt!MiReserveAlignedSystemPtes+0x7d (80544e83)
    nt!MmFirstFreeSystemPte是个MMPTE数组,sizeof(MMPTE)==4才对,怎么代码中会用到:

80544e35 8d3cf5c0975580  lea     edi,nt!MmFirstFreeSystemPte (805597c0)[esi*8] ;每个元素占用8字节
    查看了wrk1.2的源码,发现在开启PAE的情况下MMPTE会占用8B:

#if !defined (_X86PAE_) //未开启PAE
typedef HARDWARE_PTE_X86 HARDWARE_PTE;
typedef PHARDWARE_PTE_X86 PHARDWARE_PTE;
#else //开启PAE
typedef HARDWARE_PTE_X86PAE HARDWARE_PTE;
typedef PHARDWARE_PTE_X86PAE PHARDWARE_PTE;
#endif
typedef struct _HARDWARE_PTE_X86PAE {
    union {
        struct {
	...
        };
        struct {
            ULONG LowPart;
            ULONG HighPart;
        };
    };  //union结构中定义了2个ULONG,整个结构至少8字节
} HARDWARE_PTE_X86PAE, *PHARDWARE_PTE_X86PAE;
     由此,我猜测我调试用的xp sp3开启了PAE模式,来找找系统信息作为佐证:


系统属性和windbg的信息无不证明这个xp系统运行在PAE模式下。

     那么接下来要做的就是关闭PAE模式,网上搜索了一圈(容我吐槽一下baidu,真是什么都没找到,最后实在bing上找到的解决办法)发现只要修改c:\Boot.ini属性并添加以下参数:  /noexecute=alwaysoff /NOPAE即可(这么做同时会关闭系统DEP功能,反正我是调试用,无所谓)

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
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="Debug" /noexecute=alwaysoff /NOPAE /debug /debugport=COM1: /baudrate=115200
保存并重启后成功关闭了PAE模式:

此时,系统属性中已经没有"物理内存扩展"这样的字眼,另外windbg也显示当前用的nt模块指向ntoskrnl.exe。PAE成功关闭~



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值