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