+ -
当前位置:首页 → 问答吧 → 一些概念....迷糊....

一些概念....迷糊....

时间:2011-12-08

来源:互联网

看这个专栏人多,活跃点,就在这里问了,呵呵......

  1、虚拟地址空间什么概念?映射是什么概念?比如说什么文件被映射到地址空间中去的....
  2、为什么说,EXE文件建议装入基址为 00400000,其基址一般不被其它程序占用,所以,一般不须要重定位。而Dll文件建议装入基址为10000000,该建议装入基址有可能已被其它Dll文件占用,故一般Dll文件须要重定位? 问::为什么EXE的基址一般不会被其它程序占用,而Dll的基础有可能被其它Dll占用呢?
  3、所有的EXE和Dll都是被映射到内存去的吗?

  1:虚拟地址空间可否理解成,每个EXE文件装入内存后,系统都会为其维护一段虚拟地址空间,比如 00000000 ~ FFFFFFFF,
  (而EXE只能使用其中的一部分?而如果只能使用一部分,就又引出了第四个问题 4、前端地址是不是不可用?是被系统用了吗?比如,向内存00000000写入值会引发异常?而如果的确是为每个EXE文件都维护00000000 ~ FFFFFFFF这么多的空间,那两个EXE文件的两个虚拟空间段 是否有重叠区域是被系统统一占用的,比如无论在哪个EXE文件中,在00000000中写入都是违法的....而如果是有一部分区域被系统重叠占用,那这又是什么逻辑????晕死.... )
  2:而系统为每个EXE文件维护的虚拟地址空间00000000 ~ FFFFFFFF之中,只可能存在一个EXE文件,所以,EXE的默认装入基址一般不可能被其它程序占用,所以,EXE文件每次装入就可保证其默认基址就是实际装入基址,因此,无须重定位。而一个EXE文件,一般都会引用多个DLL文件,所以,当PE加载器加载第一个Dll文件的时候,它的默认装载基址是10000000,因此,它可被正常载入,无须重定位,而当PE加载器为EXE文件加载第二个Dll文件的时候,它的默认装载基址也是10000000,而在PE装载器载入第一个Dll文件的时候,10000000该虚拟地址已被占用,因此,第二个Dll文件就须要重定位了....
  以上当中,括号以外的理解,对吗???
  X: 映射可以理解成Copy,但不等于Copy。比如,一个Dll文件,是被映射到应用程序虚拟空间当中的。假设(我说的是假设)一个Dll文件当中的机器码为 90 90.事实上,PE加载器把这段机器码写到其它地方去了(或是仍保留在磁盘文件中),并没有把Dll文件当中的实际机器码Copy到应用程序的地址空间,只是为其维护了一一对应的关系,比如,Dll文件被映射到EXE的虚拟空间10000000处,而该处的内容并非是 90 90,而是XX XX,但通过XX XX可以找到正确的机器码 90 90.那如果在应用程序虚拟空间10000000处,将XX XX修改为85 85,通过某种方式保存后,其Dll的机器码是否从90 90改变成了 85 85了呢?也就是说,在Dll映射到应用程序虚拟空间段中修改其值,是否会影响到真实Dll文件的值???
  其次,在问第五个问题 
  5:应用程序虚拟地址空间00000000,是否就等同于物理内存地址的实际空间??其次,一些程序出了问题,挂掉后会提示 0x00000000不能为“Write”, 而其提示的这个值是虚拟地址空间的地址,还是物理内存实际地址???



  好多东西想不明白的,纯属个人纠结,大家莫见笑.....其次,建议我不要想这些“实际意义不大”的问题的人,建议还是不用回帖了,俺是冒着-1度的室温打的这些字..... ~_~ 脑浆快干了,大侠们帮帮忙......SOS......
   没多少分了,就给个40吧,省着点用........~_~
 

作者: inpile99   发布时间: 2011-12-08

问题这么多 分太少?

作者: hllfl   发布时间: 2011-12-08

该回复于2011-12-08 13:40:35被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#3楼 得分:0回复于:2011-12-08 13:34:07
在Win32系统下会为每个进程开辟4G的地址空间,因为4G是一个32位整数所能表示的最大的值,其中有2G是由操作系统内核使用,另外2G给用户使用,因为这里的内存地址并不是物理内存的真实地址,所以称为虚拟地址空间,虚拟地址到真实物理地址的映射关系是由操作系统维护的。
所谓文件被映射到地址空间可以理解为就是把文件加载到这个虚拟内存中去了,同一个进程所有加载的DLL都在同一个地址空间,基地址不同所以不会冲突。
第五个问题是虚拟地址空间的地址。

其他的搞不太清楚,最后冒着被楼主骂的风险蛋疼的说一句:除非当下特别需要否则暂时不用管这些问题,基本不影响写程序。

作者: inpile99   发布时间: 2011-12-08

To xrunning: 
  至少通过你的回答,明了了一些东东,纠结而已,没其它的意思......
  Thanks....
  继续观望楼下的.......嘿嘿....

作者: xrunning   发布时间: 2011-12-08

《深入解析Windows操作系统-Windows Internals》

作者: inpile99   发布时间: 2011-12-08

莫非注定要沉下去了????

作者: zhao4zhong1   发布时间: 2011-12-08