能力值:
( LV2,RANK:10 )
|
-
-
2 楼
如果你访问的是内核的内存空间呢?会让你随意读取么?
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
每个进程有4吉独享地址空间,高2吉是操作系统的。低2吉的高和低64k(好像是这么多)也属于操作系统的。你3级进程任意读取数据?开玩笑吧。何况内存分页机制也不允许呀,每页4kb都有各自的属性。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
当然不会让我随意读取高于2G的内存空间,但是我读取低于2G的内存空间也会报错。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
用户空间的代码ring3无法对ring0级的内存作任何操作,包括读操作,程序读取高于2G的内存空间就会报内存不能为read,但是我读取少于2G的内存也报错。
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
不是任意地址都能访问的,在操作系统的分页机制层里,主要有两大限制:
1. 权限限制:某些virtual address地址的访问需要高权限
2. 缺页限制:不是所有的virtual address 都会映射到物理地址上,OS会有选择性的进行映射。
---------------------
所以,在程序中你不可能直接使用地址访问,这就靠“碰运气”,撞对了就可以访问。编译器和链接器知道OS映射到哪些区域,loader(加载器)会正确将程序加载应该放的地方。
你试着访问 0x00401000 附近的区域,应该可以访问
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
如果是未分配的虚拟内存,估计就不行了
|
|
|