关于内存映射一段话求解

yg29hxj 2011-01-11 10:28:45
以下是网上的一段.exe文件加载过程:
ü 加载过程

1. 系统根据exe文件名建立进程内核对象、页目和页表,也就是建立了进程的虚拟空间。

2. 读取exe文件的大小,在默认基地址0x0040 0000上保留适当大小的区域。可以在链接程序时用/BASE 选项更改基地址(在VC工程属性\链接器\高级上设置)。提交时,操作系统会管理页目和页表,将硬盘上的文件映射到进程空间中,页表中保存的地址是exe文件的页偏移。

3. 读取exe文件的.idata节,此节列出exe所用到的所有dll文件。然后和

exe文件一样,将dll文件映射到进程空间中。如果无法映射到基地址,系统会重新定位。

4. 映射成功后,系统会把第一页代码加载到内存,然后更新页目和页

表。将第一条指令的地址交给线程指令指针。当系统执行时,发现代码没有在内存中,会将exe文件中的代码加载到内存中。
------------------------------------------------------------------------------------------------------------
我要问的是,在第二步骤中所说的“将硬盘上的文件映射到进程空间中”是不是将硬盘文件映射到线性地址上啊?线性地址再映射成物理地址?
还有第四个步骤的疑问就是:在第二步骤中已经映射了硬盘上的文件为什么在第四步骤中还要将exe文件中的代码加载到内存中呢?硬盘上的文件指的是什么。。

...全文
120 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BAYNPU 2011-01-12
  • 打赏
  • 举报
回复
回答基本正确。
yg29hxj 2011-01-12
  • 打赏
  • 举报
回复
感觉2楼的回答蛮正确的,有知道 的朋友说下哈,求确定,哈哈
一个傻冒 2011-01-11
  • 打赏
  • 举报
回复
我的理解是这样的。你说的第二步只是将EXE在文件系统中的页映射进了进程空间中的页表中。此时只是映射。数据和代码没有真正写到物理内存中。
第四步的时候,才真正将要使用的代码和数据写入物理内存。这时,程序才能正确运行。
dengzikun 2011-01-11
  • 打赏
  • 举报
回复
第二步是映射为线性地址,如果没有启用分页,线性地址就是物理地址,如果
启用分页,还需要映射为物理地址。

程序代码和数据是按需加载,一般不会全部加载到内存.

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧