10-调用门
作者:互联网
本节内容
调用门(无参)
1、调用门执行流程
指令格式:CALL CS:EIP(EIP是废弃的)
执行步骤:
-
根据CS的值 查GDT表,找到对应的段描述符 这个描述符是一个调用门.
-
在调用门描述符中存储另一个代码段段的选择子.
-
选择子指向的段 段.Base + 偏移地址 就是真正要执行的地址.
2、门描述符
3、构造一个调用门(无参 提权)
0040EC00 000810D0
4、代码测试
步骤一:代码测试,并观察堆栈与寄存器的变化.
记录执行前的寄存器值:
CS SS ESP
步骤二:在测试代码中加入特权指令并读取高2G内存.
5、课后练习:
自己实现调用门
本节内容
调用门(有参)
要点回顾:
上一节课我们讲了调用门的执行过程,这一节我们讲解一下
调用门的参数传递
1、构造一个带参数的调用门
调用门描述符:0040EC03 00081030
eq 8003f048 0040EC03`00081030
2、代码测试
(课堂演示)
3、调用门总结:
-
当通过门,权限不变的时候,只会PUSH两个值:CS 返回地址
新的CS的值由调用门决定 -
当通过门,权限改变的时候,会PUSH四个值:SS ESP CS 返回地址 新的CS的值由调用门决定 新的SS和ESP由TSS提供
-
通过门调用时,要执行哪行代码有调用门决定,但使用RETF返回时,由堆栈中压人的值决定,这就是说,进门时只能按指定路线走,出门时可以翻墙(只要改变堆栈里面的值就可以想去哪去哪)
-
可不可以再建个门出去呢?也就是用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