- 论坛徽章:
- 0
|
原帖由 thinshootout 于 2009-1-23 10:40 发表
书上说CPL存储在CS段描述符中的RPL位;又说,如果目标是非一致代码段,要求CPL等于目标段DPL,RPL小于等于DPL。
这块儿有些困惑,如果说,源代码段选择子的RPL位表示CPL,那么其RPL又从何而来呢?
初学操 ...
你所说的这种情况是:直接跳转 far jmp / far call (不使用 gate 符)
对于这种不通过 gate 符而直接跳转的情况,CPL 是不会改变的。 这样意味着:CPL = DPL (必须)
使用 conforming descriptor 意味着:访问高权限代码。
使用 nonforming descriptor 意味着:访问同级代码。(除了 call nonforming code segment with gate 外)
所以:访问 nonforming 类目标代码时,RPL 不能大于 DPL(也就是不能访问高权限级别)
故这种情况下:CPL == DPL && RPL <= DPL
要向高权限级别转移,必须使用 gate 符,包括 call gate, trap gate, interrupt gate 以及 task gate
通过 gate 向高权限转移时,CPL 将变为 target code segment's descripotr 的 DPL
RPL 相当于另一个门符,通过变换不同的 RPL 来访问不同级别的 segment。 |
|