windows内核情景分析学习笔记10
来源:互联网 发布:淘宝客服每周工作总结 编辑:程序博客网 时间:2024/05/16 12:00
1、共享映射区
对于用户空间的映射,一个物理页面通常只被映射到一个进程用户空间。
对于系统空间的映射,是由所有进程共享的。
但是,一个物理页面也可以被映射到多个进程的用户空间,映射到的虚拟地址可以不尽相同。由这样的物理页面映射在多个进程虚存空间形成的连续区间,称为"共享映射区"。
2、共享映射区存在的原因
①系统使用共享映射区载入并运行.exe和DLL文件。这大量的节约了页交换文件空间及程序启动的时间
②用户可使用共享映射区来访问磁盘上的数据文件。使我们可以避免直接对文件进行IO操作和对文件内容进行缓存
③通过使用共享映射区,可以在一台机器的不同进程间共享数据,效率很高。
3、创建共享映射区
若要创建共享影射区,需执行如下三个步骤:
①创建共享映射区对象
②分配虚存空间
③建立映射
3.1、创建共享映射区对象
首先,创建共享映射区对象使用NtCreateSection
最后一个参数FileHandle,如要创建文件映射区,则应该首先打开文件,并获取文件句柄填入;如填入NULL,则创建共享映射区。
其实现为:
显然,其函数主体为MmCreateSection
其实现为:
这个函数一开始进行页面保护模式的合理性检查,检查后,就根据目标文件的性质不同进行不同的处理:
①如果是一个可执行文件,就通过MmCreateImageSection处理。因可执行文件有着特殊的结构。所以当做特例处理。
②如果是普通数据文件,由MmCreateDataFileSection创建文件映射区
③如果没有给定目标文件,那么就是创建“共享内存区”。(其实是以页面交换文件为目标文件)
以MmCreateDataFileSection为例,分析一下创建文件映射区的过程。
此函数中做了如下几件事情:
①创建映射区对象,由ObCreateObject完成
②获取数据文件对象,由ObReferenceObjectByHandle完成,并获取到数据文件的FILE_OBJECT结构指针
③构造一个映射段MM_SECTION_SEGMENT数据结构(ExAllocatePoolWithTag完成),让映射区对象与数据文件对象中的相关指针指向这个映射段。
④使映射区对象中的FileObject字段指向数据文件对象。
关键代码如下:
、
3.2 映射区与映射段的区别
一个映射区由一个或多个映射段组成。对于映射的是可执行文件,其文件本身就分为多个段,例如代码段、数据段等,所以映射区也得要分成若干个映射段;对于映射的是数据文件,则只有一个映射段。
映射区对象结构
映射段对象结构
3.3、分配虚存空间并建立映射
这时,映射区对象建立完毕,而并未实际建立映射。实际的映射是通过系统调用NtMapViewOfSection完成的。
这个系统调用的作用是,将一个映射区对象的一部分或全部映射到某个进程的用户空间。
对于数据文件,其最终调用的是MmMapViewOfSegment(因数据文件只有一个段)。
此函数很简单,就是申请一块虚存空间,并将对应的MEMORY_AREA结构的分量设置成指向映射区就完事了。
- windows内核情景分析学习笔记10
- windows内核情景分析学习笔记1
- windows内核情景分析学习笔记2
- windows内核情景分析学习笔记3
- windows内核情景分析学习笔记4
- windows内核情景分析学习笔记5
- windows内核情景分析学习笔记6
- windows内核情景分析学习笔记7
- windows内核情景分析学习笔记8
- windows内核情景分析学习笔记9
- windows内核情景分析学习笔记11
- windows内核情景分析学习笔记12
- Windows内核情景分析学习笔记P38---P41
- windows内核情景分析笔记1.3 IRQL
- Windows内核情景分析 学习日志之一
- windows内核情景分析
- windows 内核情景分析---说明
- windows内核情景分析 --APC
- 学习嵌入式操作系统之旅
- Tarjan算法求强连通分量
- 完全正常的win7,昨天装完VMware后,每次启动系统都停在选择用户的界面
- htc g2 tim 刷机
- FLEX程序如何改变程序中单个动画的帧速
- windows内核情景分析学习笔记10
- VC++与Matlab混合编程之引擎操作详解(1)
- SMTP & POP3 Email for Virtual Users on Debian Sarge
- VC++与Matlab混合编程之引擎操作详解(2)引擎API详解
- 黑莓8800拆机
- HD1013 大数处理
- VC++与Matlab混合编程之引擎操作详解(3)数据类型mxArray的操作
- J2ME开发环境
- VC++与Matlab混合编程之引擎操作详解(3)数据类型mxArray的操作