首页
社区
课程
招聘
有高手懂MiFlushTlb这个冲刷块表tlb中页表项的函数实现
发表于: 2012-4-14 18:11 5767

有高手懂MiFlushTlb这个冲刷块表tlb中页表项的函数实现

2012-4-14 18:11
5767
VOID
MiFlushTlb(PULONG Pt, PVOID Address)
{
#ifdef CONFIG_SMP
   if (Pt)
   {
      MmUnmapPageTable(Pt);
   }
   if (KeNumberProcessors>1)
   {
      KeIpiGenericCall(MiFlushTlbIpiRoutine, Address);
   }
   else
   {
      MiFlushTlbIpiRoutine(Address);
   }
#else
   if ((Pt && MmUnmapPageTable(Pt)) || Address >= MmSystemRangeStart)
   {
      __invlpg(Address);
   }
#endif
}
上面为什么是Address映射虚拟地址落在系统空间才可冲刷相应地址的块表tlb页表项,以及if前面这个条件为什么当Pt不为NULL或者MmUnmapPageTable(Pt)返回true才可冲刷Address对应的块表tlb中页表项,(为什么返回false不可以冲刷,为什么Pt为NULL不可以冲刷),明显下面这个MmUnmapPageTable(Pt)只有Pt为NULL或Pt这个地址在临时空间,并删除在临时空间中的映射才返回false
BOOLEAN MmUnmapPageTable(PULONG Pt)
{
   if (Ke386Pae)
   {
      if ((PULONGLONG)Pt >= (PULONGLONG)PAGETABLE_MAP && (PULONGLONG)Pt < (PULONGLONG)PAGETABLE_MAP + 4*512*512)
      {
         return TRUE;
      }
   }
   else
   {
      if (Pt >= (PULONG)PAGETABLE_MAP && Pt < (PULONG)PAGETABLE_MAP + 1024*1024)
      {
         return TRUE;
      }
   }
   if (Pt)
   {
      MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pt));
   }
   return FALSE;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 147
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看来别人都没有研究到这些,没有人回答,哎
2012-4-15 15:15
0
雪    币: 147
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
难道没有高手懂这些东西,就是Win内核源码里的啊
2012-4-17 12:49
0
雪    币: 48
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
绝对高手,我看Shadow Walker都看不懂。
2012-4-20 10:16
0
雪    币: 147
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Himylive大虾,讲讲这个冲刷页表项的函数好吗,拜托了
2012-4-20 12:41
0
雪    币: 147
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哎,大牛也解决不了啊
2012-4-23 19:53
0
雪    币: 384
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我是过来mark的
2012-4-23 20:22
0
雪    币: 147
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我懂了,结贴!
2012-4-30 18:30
0
游客
登录 | 注册 方可回帖
返回
//