12-陷阱门

1. 陷阱门的结构

|   7    |     6  |     5     |   4    |   3    |   2    |   1    |   0    |  字节
|76543210|76543210|7 65 4 3210|76543210|76543210|76543210|76543210|76543210|  比特
|-----------------|1|--|0|1111|--------|--------|--------|--------|--------|  占位
|offset in segment|P|D |S|TYPE|        |segment selector |offset in segment|  含义
|     31-16         |P |               |                 |       15-0      |
                    |L |

通常陷阱门是以 ----ef00 0008----这种形式出现的,当然了,第 5 个十六进制数不一定就是 e,如果 DPL = 0 的话,那这个数就是 8. 后面的 0008 是段选择子,而左右两侧的占位符是要跳转的地址。

不细心的同学还以为我上面这段都是从中断门那里抄过来的。没错,确实是抄来的,99%相同,有2个位置我改了,一个是 TYPE 那里,在中断门中 TYPE 是 1110 ,现在改成了 1111. 后面的 ee 也改成了 ef.

其它的和中断门完全相同。那么在后面的实验里,除了在安装描述符上和中断门那不一样,测试代码甚至都不用改。

2. 实验

说了这么多,到底哪不一样?这里仍然使用中断门的实验代码。但是设计的描述符稍微不一样了一点。

  • 陷阱门描述符设计
0040ef00`00081020

和前面唯一的区别就是第6位的e变成了f(之前设计的中断门描述符是 0040ee00`00081020)

  • 安装描述符
eq 8003f500 0040ef00`00081020
  • 执行结果

这里写图片描述

3. 陷阱门对 EFLAGS 的影响

从实验结果上可以看到与上节不同的是,这里的EFLAGS并未受到影响。不同于上节,进入中断门,CPU会把EFLAGS中的IF位置1,而进入陷阱门,CPU并不修改 IF 位。

4. 陷阱门对堆栈的影响

同中断门一样,当代码从 3 环进入 0环时,CPU同样做两件事。

  • 切换到 0 环栈(也就是修改 ss 段寄存器和 esp 寄存器)
  • 在0环栈中压入 ss3, esp3, eflags, cs3, eip3

在提权的时候,一直遗留了一个小小细节,0 环栈的段描述符 ss0 和 栈顶指针 esp0,从哪里来?如果你想到了这个问题,是否冒出了黑人问号 ????

本节并不打算讲 TSS(Task State Segment,任务状态段),但是为了引出这个话题,先抛出名词。然后告诉你,CPU在切换栈的时候,SS和ESP来源于 TSS。

TSS 位于内存中的某个位置,结构固定。其中两个字段,就保存了 SS0 和 ESP0.

5. 代码

本节代码和上节中断门完全相同,请移步至中断门查看代码。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值