一些概念....迷糊....
时间: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吧,省着点用........~_~
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
|
作者: inpile99 发布时间: 2011-12-08
To xrunning:
至少通过你的回答,明了了一些东东,纠结而已,没其它的意思......
Thanks....
继续观望楼下的.......嘿嘿....
至少通过你的回答,明了了一些东东,纠结而已,没其它的意思......
Thanks....
继续观望楼下的.......嘿嘿....
作者: xrunning 发布时间: 2011-12-08
《深入解析Windows操作系统-Windows Internals》
作者: inpile99 发布时间: 2011-12-08
莫非注定要沉下去了????
作者: zhao4zhong1 发布时间: 2011-12-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28