为什么ring3的程序不能通过dpl为3的数据段访问所有的地址空间?

realmiss 2003-09-29 05:21:34
ring3程序运行时ecs eds 指向的描述附 base 0 Limite 4G dpl 3
我的ring3程序岂不是可以访问所有的线性地址空间了吗?
...全文
51 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
realmiss 2003-10-09
  • 打赏
  • 举报
回复
谢谢 明白一点了 结贴
W32API 2003-09-30
  • 打赏
  • 举报
回复
保护模式下,段只是选择子。在描述表中会保存有关于段的起始地址和段的大小。
但是由于 WIN 为每个程序分配了一个 4G 的线性地址空间(理论上)。
而 WIN 本身的数据也通过页面被映射进入每个进程的 0x80000000 以上的空间。
而这些空间的访问权限是通过页表进行设置的。
INTEL 的页表机制可以定义每个页表的访问权限(WIN 使用的正是这个)。
这比段要灵活得多,即使操作系统数据跟用户数据交叉在一起,
只要还是按 4K 分开,那么就没有问题。
这也就是 WIN 进程基本没有段操作的原因。
代码、数据、堆栈段选择子由操作系统在进程初始化时分配(各一个)。

Areslee 2003-09-30
  • 打赏
  • 举报
回复
你没有页特权!
realmiss 2003-09-30
  • 打赏
  • 举报
回复
只要我特权级够就可以访问了,毕竟系统的数据也在4G范围内

你好象没有认真的看我的问题,也没有仔细看上面的回复帖子
ahalf 2003-09-29
  • 打赏
  • 举报
回复
win下,每个程序都拥有4G的地址空间,但
你的程序只能访问你的程序自己所控制的4G线性地址,而不是设备的4G物理地址,所以你访问不到操作系统的核心数据和其他程序的数据
realmiss 2003-09-29
  • 打赏
  • 举报
回复
to W32API(李诚) 照你的说法windows的机制使80x86的段保护不起作用了? 那么在程序里定义的真实的段的大小windows又是怎样来区别呢?它如果来通过页来保护段?
W32API 2003-09-29
  • 打赏
  • 举报
回复
是的。
但是权限是在页上做限制。

21,459

社区成员

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

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