特权级之间的转换

特权级之间的转换包括代码段之间的转换和数据段之间的转换。对于数据段之间的转换,只检查选择子中RPL和段中DPL的值,如果RPL<=DPL则可以转换,而对于代码段之间的转换,情况会稍微复杂。

代码段之间特权级的转换主要通过jmp和call指令实现,jmp和call的操作数可以直接是选择子,但注意在用call时,要记得ret。call的操作数还可以是一个调用门或者是一个包含选择子的TSS或者是一个包含TSS的任务门。对于门,其实质就是描述符,与代码段和数据段描述符不同,它是系统描述符,所以其s=0。暂时接触到的门共有四种:调用门、中断门、陷阱门和任务门。调用门只能放在GDT或LDT中,不能在IDT中,中断门和陷阱门则只能放在IDT中,而任务门既可以放在GDT中也可以放在LDT和IDT中。

这次碰到的问题有:

1.GDT中第四项(代码中为调用门)的索引为0x18,开始写为0x10了~

2.ret时,会检查被调用者的cs,eip等值,所以如果没有保存的话,系统会崩溃

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值