08-代码跨段跳转实验

本节内容

通过JMP FAR指令修改CS段寄存器

要点回顾

在上一节课种重点介绍了JMP 0x20:0x004183D7
跨段跳转的五个步骤,分别是:

1、段选择子拆分
2、查表得到段描述符
3、权限检查
4、加载段描述符
5、代码执行

1、构造段描述符

找一个非一致代码段描述符,复制一份,写入到GDT表中

kd> r gdtr
gdtr=8003f000
kd> dq 8003f000
8003f000 0000000000000000 00cf9b000000ffff
8003f010 00cf93000000ffff 00cffb000000ffff
8003f020 00cff3000000ffff 80008b04200020ab
8003f030 ffc093dff0000001 0040f30000000fff
8003f040 0000f2000400ffff 0000000000000000
8003f050 80008954b1000068 80008954b1680068
8003f060 000093022f40ffff 0000920b80003fff
8003f070 ff0092ff700003ff 80009a400000ffff

将 00cffb000000ffff 数据写如某个P位为0的位置 kd> eq 8003f048 00cffb000000ffff(用内核工具查看新增是否成功)

2、OD中进行测试

在OD中,执行跨段跳转 JMP FAR 004B:0041840D

3、修改段描述符的权限级别,并再次在OD中进行测试

将00cffb000000ffff 改为00cf9b000000ffff
在OD中,执行跨段跳转 JMP FAR 004B:0041840D

4、将该段描述符的属性更改为一致代码段.

将00cffb000000ffff 改为00cf9f000000ffff
在OD中,执行跨段跳转 JMP FAR 004B:0041840D

5、总结:

1、为了对数据进行保护,普通代码段是禁止不同级别进行访问的。用户态的代码不能访问内核的数据,同样,内核态的代码也不能访问用户态的数据.

2、如果想提供一些通用的功能,而且这些功能并不会破坏内核数据,那么可以选择一致代码段,这样低级别的程序可以在不提升CPL权限等级的情况下即可以访问.

3、如果想访问普通代码段,只有通过“调用门”等提示CPL权限,才能访问。

6、课后练习:

自己动手实现代码跨段访问.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值