调用门实战(4)----特权级转移实践

本次实践从ring0进入ring3然后又回到ring0,运行结果如下图:

 

 

具体步骤如下:

1、进入ring3

在前面的理论篇中,我们知道可以用ret指令跳转到目标代码段。这个例子中,在ret前的堆栈如下图:

 

 

我们要添加ring3代码段和一个ring3的堆栈段。

 

描述符:

 

选择子:

 

ring3堆栈段:

 

ring3代码段:

 

ring3代码要写显存访问到video段,把video段的DPL改写为3:

 

2、进入ring3代码后,使用调用门跳回ring0

修改调用门描述符和选择子的DPL和RPL,修改描述符和选择子满足CPL和RPL小于等于调用门DPL的条件

 

从低特权级到高特权级需要添加TSS段:

 

在特权级变换之前加载TSS:

 

定义TSS结构如下,本例只用到0级堆栈。

 

 

===============================================================================

完整代码如下:

pm.inc代码:

 

pmtest代码:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值