首页
论坛
课程
招聘
[原创]cpu任务段任务门
2022-4-20 14:54 7622

[原创]cpu任务段任务门

2022-4-20 14:54
7622

cpu设计之初是为操作系统任务切换提供了硬件支持(任务门和TSS任务段),以下几个概念

 

TR寄存器:是一个段寄存器,和CS,SS,FS,GS,DS段寄存器一样一共96位,包含可见的16位和80位的不可见部分,所以加载任务段(LTR指令),会查找gdtr寄存器中的全局描述符表,将对应的段描述符(TSS段描述符)加载到tr寄存器

 

TSS任务段:实际是一块内存,存放了所有寄存器的值,因为cpu设计的任务切换需要将所有的寄存器都替换掉(eip指向新的代码位置,esp指向新的栈位置),这样就是一个新的任务,可以使用windbg查看tss任务段的结构:
图片描述

 

任务门 :任务门是一个系统段描述符,存放在全局中断描述符表中
图片描述
P位表示当前描述符是否有效
DPL当前特权级别
S位为0表示系统段,位1表示位数据或者代码段
Type域为0101是任务门
TSS Segment Selector ,为任务段描述符
任务门和中断门一样,使用int指令调用

 

TSS段描述符:存在于gdt表中,和gdt表中其他段描述符一样,baseaddress为基地址,指向一块TSS任务段,结构如下:
图片描述
以下是我当前环境的tr寄存器对应的任务门描述符: 图片描述
81008b10`300020ab为当前tr寄存器对应的TSS段描述符
段基址为0x81103000
G位为0表示当前界限是以字节对其
D位L位为0
界限为0x20ab,刚好是windbg中_kTSS结构的大小
如何使用任务段和任务门:
任务段可以和调用门一样,直接使用jmp far指令或者call far指令进行调用,但是当前cpu权限(CPL)要大于等于任务段描述符中的DPL,所以不能提权,只能平级调用,也可以使用int指令,当cpu发现中断号下的中断描述符为任务门时,使用TSS段描述符查找gdt表,执行tss段中的eip地址实现任务切换


【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回