Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363013
  • 博文数量: 38
  • 博客积分: 1935
  • 博客等级: 上尉
  • 技术积分: 724
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-23 16:34
文章存档

2010年(4)

2009年(33)

2008年(1)

分类:

2009-05-03 21:58:08

  利用 TSS  机制可以进行任意权限级别的随意切换是基于:

(1)在任何权限下可以更改 eflags.NT 标志位。

(2)使用中断返回指令 iret 进行切换到更高级或更低级权限的代码。


如下:
  pushfd                                       /* 这条指令可以在 3 级执行 */
      or dword ptr [esp], 0x4000           /* 置 eflags.NT 为 1 */
      popfd                                         /* 写 eflags */
      ... ...
      iret                                          /* 使用 iret 进行切换到高级或低级代码 */

--------------------------------------------------------------------------

基于以上所述成立的条件是:

(1)在当前 TSS segment 中的 link(old TSS selector)指出另一个 TSS selector

(2)从这个 TSS selector 所索引出 TSS descriptor ,最终从这个 TSS descriptor 加载的 TSS segment 中加载权限高或权限低的 selectors,包括 cs selector 、ds selector 以及 ss selector ,从而实现任何权限的切换。


这里唯一的障碍是:
  需要在 0 级权限下首先建立一个可用的 TSS segment 环境,而 TSS segment 的 link 域里有个可用的 TSS selector。LTR 指令需要在 0 级权限下使用。
阅读(1389) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~