其他分享
首页 > 其他分享> > 10-调用门

10-调用门

作者:互联网

本节内容

调用门(无参)

1、调用门执行流程

指令格式:CALL CS:EIP(EIP是废弃的)

执行步骤:

  1. 根据CS的值 查GDT表,找到对应的段描述符 这个描述符是一个调用门.

  2. 在调用门描述符中存储另一个代码段段的选择子.

  3. 选择子指向的段 段.Base + 偏移地址 就是真正要执行的地址.

2、门描述符

在这里插入图片描述

3、构造一个调用门(无参 提权)

0040EC00 000810D0

4、代码测试

步骤一:代码测试,并观察堆栈与寄存器的变化.

记录执行前的寄存器值:

CS SS ESP

步骤二:在测试代码中加入特权指令并读取高2G内存.

5、课后练习:

自己实现调用门

本节内容

调用门(有参)

要点回顾:

  	上一节课我们讲了调用门的执行过程,这一节我们讲解一下

调用门的参数传递

1、构造一个带参数的调用门

在这里插入图片描述

调用门描述符:0040EC03 00081030

eq 8003f048 0040EC03`00081030

2、代码测试

(课堂演示)

3、调用门总结:

  1. 当通过门,权限不变的时候,只会PUSH两个值:CS 返回地址
    新的CS的值由调用门决定

  2. 当通过门,权限改变的时候,会PUSH四个值:SS ESP CS 返回地址 新的CS的值由调用门决定 新的SS和ESP由TSS提供

  3. 通过门调用时,要执行哪行代码有调用门决定,但使用RETF返回时,由堆栈中压人的值决定,这就是说,进门时只能按指定路线走,出门时可以翻墙(只要改变堆栈里面的值就可以想去哪去哪)

  4. 可不可以再建个门出去呢?也就是用Call 当然可以了 前门进 后门出

4、课后练习:

1、 pushad
pushfd

popfd
popad
这几行代码有什么意义?是必须的吗?

2、 mov eax,[esp+0x24+0x8+0x8]
mov eax,[esp+0x24+0x8+0x8]
mov eax,[esp+0x24+8+0]
这几行代码在做什么?

标签:10,调用,代码,0x24,描述符,0x8,CS
来源: https://blog.csdn.net/weixin_39269078/article/details/110265238