您的位置:首页 > 其它

利用 TSS 机制切换到任何权限级别

2012-04-05 09:04 239 查看
转自:点击打开链接

利用 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 级权限下使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: