《编写驱动程序的时候决定代码与数据是否需要常驻非分页池》由会员分享,可在线阅读,更多相关《编写驱动程序的时候决定代码与数据是否需要常驻非分页池(7页珍藏版)》请在金锄头文库上搜索。
1、Windows内核安全编程实践之路安于此生 看雪学院自我介绍 安于此生ExpLife,现任高级逆向工程师。主要从事windows驱动开发及逆向方面的工作,擅长C/C+,ASM,软件调试逆向,恶意代码分析与对抗。 主页:https:/ windows使用虚拟内存的方式来管理内存.虚拟内存系统可以让软件有一个比物理内存大得多的虚拟内存空间.为了做到这一点,内存管理器需要在物理内存与磁盘文件之间交换页帧. 但操作系统的某些部分是不能被分页的,比如处理缺页中断的代码与数据结构就必须常驻内存.windows把内核模式地址空间分成分页内存池与非分页内存池.分页与非分页内存用户模式地址空间总是分页的.必须常
2、驻内存的代码与数据放在非分页池;不必常驻内存的代码与数据放在分页池.编写驱动程序的时候决定代码与数据是否需要常驻非分页池有一个简单规则: 执行在=DISPATCH_LEVEL级的代码不可以引发缺页中断PAGED_CODE()分页与非分页内存 windows为每个硬件中断和少数软件事件赋予了一个优先级,即中断请求级别(interrupt request level - IRQL): 分页与非分页内存申请内存 ExAllocatePool/ExAllocatePoolWithTag 类比 C语言中的malloc释放内存 ExFreePool/ExFreePoolWithTag 类比 C语言中的free内存管理