社区
汇编语言
帖子详情
为什么ring3的程序不能通过dpl为3的数据段访问所有的地址空间?
realmiss
2003-09-29 05:21:34
ring3程序运行时ecs eds 指向的描述附 base 0 Limite 4G dpl 3
我的ring3程序岂不是可以访问所有的线性地址空间了吗?
...全文
51
7
打赏
收藏
为什么ring3的程序不能通过dpl为3的数据段访问所有的地址空间?
ring3程序运行时ecs eds 指向的描述附 base 0 Limite 4G dpl 3 我的ring3程序岂不是可以访问所有的线性地址空间了吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
是的。
但是权限是在页上做限制。
特权级--ring0到
ring3
内核要和用户
程序
分开,内核一定要安全,
不能
被用户
程序
干涉,但是有时候用户
程序
也需要读取内核的某些
数据
,怎么办呢?x86就引入了
访问
特权等级(0-3)的机制,x86 cpu共有4个特权级 level0 到 level3 其中level0特权级最高,level3特权级最高。处理器通过识别CPL、
DPL
、RPL这3中种特权级进行特权级检验。 CPL(Current Privilege Level)是当
不同特权级代码
段
之间的跳转(CPL
DPL
RPL之间的关系)
1、特权级 2、一致代码
段
和非一致代码
段
3、
DPL
、RPL、CPL分别代表的含义,存储在什么位置,以及它们之间的关系 4、不同特权级
数据
段
之间的
访问
规则 5、不同特权级代码
段
之间的转移 6、代码
段
之间的转移对堆栈的影响 7、结合pmtest5.asm来见证不同特权级代码
段
之间的跳转 一、特权级在IA32的分
段
机制下,特权级总共有4个特权级别,从高到低分别是0、1、2、3。数...
调用门使代码
段
从
ring3
调用到ring0再回到
ring3
的过程
GDT和LDT分别为全局描述表和局部描述表,其中表中每一项又叫做
段
描述符。
段
描述符,由
段
地址,以及
段
类型,特权级
DPL
等组成,其中
段
类型说明此
段
是代码
段
还是
数据
段
,还是各种门,还是TSS等。通过GDT
访问
某个
段
的时候需要使用
段
选择符来进行调用。普通调用下,是根据是否是一致代码
段
进行同级权限代码
段
之间的调用,或者是低权限向高权限代码的调用,但是CPL不会改变。如果想要从低权限向高权限调用,并且可以改...
用比喻类比说明CPU的特权级
DPL
- CPL - RPL
首先要弄清,这是CPU的机制,不是操作系统的。
DPL
是
数据
的保密级别RPL是用户
程序
调用系统代码去
访问
数据
时,要求系统代码采用的
访问
权限或
访问
的保密级别CRL是代码本身的
访问
权限级别只能请求帮忙者降低身份去协助:RPLCRL但这还有什么意义呢?为什么不自己直接去
访问
?这是没弄清,我们的
程序
代码,是不允许直接
访问
数据
的,是要依靠高
访问
权限的操作系统去
访问
数据
的,是要依靠R0级
特权级--
ring3
到ring0
还记得吗?我们用调用门和lcall指令实现特权级由低到高的转移. 假设我们想由代码A转移到代码B,运用一个调用门G,即调用门G中的目标选择子指向代码B的
段
。实际上我们要考虑4个要素:CPL、RPL、
DPL
_B(代码B的
DPL
)、
DPL
_G(调用门G的
DPL
)。 第一步,当A
访问
调用门G时,规则相当于
访问
一个
数据
段
,要求CPL和RPL都小于或者等于
DPL
_G.也就是CPL和RPL需要在更高的特权
汇编语言
21,459
社区成员
41,602
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章