一.如何识别门描述符:
门描述符是什么? 从一个房间进入到另一个房间时,我们就需要经过一扇门,从用户的2G空间,进入到内核的2G空间,我们也需要经过一扇门.
当S位=1 Type位为1100的时候
这个描述符,是一个门描述符:
二.门描述符有什么特点是区别于其他描述符的:
1.普通代码中,CPU要执行的代码地址为EIP所存储的地址,而在门中,将要被执行的代码地址是由Base(新地址的段选择子)+offset31:16+offset:15:0组成的.
CALL CS:EIP(此时的EIP并没什么卵用,凑个数...)
_asm
{
CALL fword prt[0x48:12345678]
}
当代码执行后,CPU会按照CS的段选择子0x0048,取查找GDT表,之所以选择这个位置,是因为在GDT表中,此位置一直为空,方便我们改写.
0000(offset1) ec00`0008 0000(offset2)
两个offset组成的地址,就是中断门要跳去的真实EIP
P位要为1,DPL要为3(因为代码运行时你还处于R3层),因此1110组成了e
TYPE 1100 是调用门的标志,所以组成了c
后面跟的是0000
最后的ParamCount是要传的参数,没有的时候就些了0
到此ec00 组合完毕
Segment Selector是新的段选择子,根据需要填写,如果想提权的话RPL就需要置0
随便写了一个 0008
(由于Windows系统本身并没有使用调用门,而其本身我也不是很喜欢用,所以测试代码也懒得写了...因此只是写了一个模型,offset和Index写的都是0)
0000ec00`00080000 就是这么来的.