利用 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 级权限下使用。
利用 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 级权限下使用。
相关文章推荐
- 利用已有数据库结合ASP.NET2.0权限管理机制实现权限分配(2)
- [转载]x86 的 TSS 任务切换机制
- x86 的 TSS 任务切换机制
- 利用RSVIEW32的事件机制实现软冗余自动切换
- 关于利用任务状态段TSS进行进程切换的一点说明
- x86 的 TSS 任务切换机制
- x86 的 TSS 任务切换机制
- x86 的 TSS 任务切换机制
- 8. 利用反射机制, ListArray,intent来实现多Activity的切换
- 利用php反射机制 获取权限
- 利用已有数据库结合ASP.NET2.0权限管理机制实现权限分配
- 利用xcopy在复制文件或文件夹的时候保留其权限
- (三)JAVA利用反射机制将XML中的内容放入实体对象中
- Linux 入门记录:十二、Linux 权限机制
- 社区开放任务指南-9103-Android应用权限机制的分析和改进-重发
- 使用 Nginx 的 X-Sendfile 机制控制文件访问权限(php版)
- [MySQL FAQ]系列 -- 如何利用触发器实现账户权限审计
- Android 6.0 权限机制详解
- 利用EntLib授权机制实现对ASP.NET页面的自动授权
- [MySQL FAQ]系列 -- 如何利用触发器实现账户权限审计