话不多说,直接上代码
原理:
先分配一个Mapper,用MmAllocateIndependentPages的原因是不会分配出大页,用ExAllocatePool等api是有概率分配出大页Pde内存的哦
获取Mapper的Pte并保存原始Pfn,用于后续还原
改Pte->Pfn使得Mapper映射我们的物理地址,刷tlb,拷贝内存,还原Pfn
关中断的原因是invlpg之后切到其他核心会导致在其他核心的tlb没被刷新从而拷贝到错误的数据,其实提升irql就行了
注意事项:
多核情况要注意分配多个Mapper给每个核心使用
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!