首页
社区
课程
招聘
[求助]PPTE怎么获取啊
发表于: 2011-5-31 16:15 4401

[求助]PPTE怎么获取啊

2011-5-31 16:15
4401
//GetPteAddress
//pte的计算公式
//PAE和非PAE有些差别。目前看不懂
PPTE GetPteAddress( PVOID VirtualAddress )
{
    PPTE pPTE = 0;
    __asm
    {
        cli
            pushad
            mov esi, PROCESS_PAGE_DIR_BASE
            //#define PROCESS_PAGE_DIR_BASE 0xC0300000
            mov edx, VirtualAddress
            mov eax, edx
            shr eax, 22
            lea eax, [esi + eax*4]
        test [eax], 0x80
            jnz Is_Large_Page
            mov esi, PROCESS_PAGE_TABLE_BASE
            //#define PROCESS_PAGE_TABLE_BASE 0xC0000000
            shr edx, 12
            lea eax, [esi + edx*4]
        mov pPTE, eax
            jmp Done
Is_Large_Page:
        mov pPTE, eax
Done:
        popad
            sti
    }
    return pPTE;
}

我想用这个函数获取 ring3的某个地址的PPTE 我该怎么传数据给此函数啊 我传0x401000 结果驱动调用 就蓝了 应该怎么用啊?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
2
开PAE的话,0x401000 划分为 : 00 0000000001 0000000001 000000000000 四个域,CR3保存PPTE的基地址,PPTE是有4个成员的PTE,最高两位00,是使用PPTE第0个成员的PTE,就是和没开PAE时候的CR3的内容一样了,我是这么理解的
2011-5-31 16:28
0
游客
登录 | 注册 方可回帖
返回
//