关于内存映射一段话求解
时间:2011-01-11
来源:互联网
以下是网上的一段.exe文件加载过程:
ü 加载过程
1. 系统根据exe文件名建立进程内核对象、页目和页表,也就是建立了进程的虚拟空间。
2. 读取exe文件的大小,在默认基地址0x0040 0000上保留适当大小的区域。可以在链接程序时用/BASE 选项更改基地址(在VC工程属性\链接器\高级上设置)。提交时,操作系统会管理页目和页表,将硬盘上的文件映射到进程空间中,页表中保存的地址是exe文件的页偏移。
3. 读取exe文件的.idata节,此节列出exe所用到的所有dll文件。然后和
exe文件一样,将dll文件映射到进程空间中。如果无法映射到基地址,系统会重新定位。
4. 映射成功后,系统会把第一页代码加载到内存,然后更新页目和页
表。将第一条指令的地址交给线程指令指针。当系统执行时,发现代码没有在内存中,会将exe文件中的代码加载到内存中。
------------------------------------------------------------------------------------------------------------
我要问的是,在第二步骤中所说的“将硬盘上的文件映射到进程空间中”是不是将硬盘文件映射到线性地址上啊?线性地址再映射成物理地址?
还有第四个步骤的疑问就是:在第二步骤中已经映射了硬盘上的文件为什么在第四步骤中还要将exe文件中的代码加载到内存中呢?硬盘上的文件指的是什么。。
ü 加载过程
1. 系统根据exe文件名建立进程内核对象、页目和页表,也就是建立了进程的虚拟空间。
2. 读取exe文件的大小,在默认基地址0x0040 0000上保留适当大小的区域。可以在链接程序时用/BASE 选项更改基地址(在VC工程属性\链接器\高级上设置)。提交时,操作系统会管理页目和页表,将硬盘上的文件映射到进程空间中,页表中保存的地址是exe文件的页偏移。
3. 读取exe文件的.idata节,此节列出exe所用到的所有dll文件。然后和
exe文件一样,将dll文件映射到进程空间中。如果无法映射到基地址,系统会重新定位。
4. 映射成功后,系统会把第一页代码加载到内存,然后更新页目和页
表。将第一条指令的地址交给线程指令指针。当系统执行时,发现代码没有在内存中,会将exe文件中的代码加载到内存中。
------------------------------------------------------------------------------------------------------------
我要问的是,在第二步骤中所说的“将硬盘上的文件映射到进程空间中”是不是将硬盘文件映射到线性地址上啊?线性地址再映射成物理地址?
还有第四个步骤的疑问就是:在第二步骤中已经映射了硬盘上的文件为什么在第四步骤中还要将exe文件中的代码加载到内存中呢?硬盘上的文件指的是什么。。
作者: yg29hxj 发布时间: 2011-01-11
第二步是映射为线性地址,如果没有启用分页,线性地址就是物理地址,如果
启用分页,还需要映射为物理地址。
程序代码和数据是按需加载,一般不会全部加载到内存.
启用分页,还需要映射为物理地址。
程序代码和数据是按需加载,一般不会全部加载到内存.
作者: dengzikun 发布时间: 2011-01-11
我的理解是这样的。你说的第二步只是将EXE在文件系统中的页映射进了进程空间中的页表中。此时只是映射。数据和代码没有真正写到物理内存中。
第四步的时候,才真正将要使用的代码和数据写入物理内存。这时,程序才能正确运行。
第四步的时候,才真正将要使用的代码和数据写入物理内存。这时,程序才能正确运行。
作者: ydfivy 发布时间: 2011-01-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28