段寄存器结构
段寄存器共有96位,可见的只有16位,读取时也只能读取16位
003段寄存器属性探测
004段描述符与段选择子
005段描述符属性
段寄存器的attribute对应段描述符的8-23位,Base由高四字节24-31,0-7和低四字节16-31位构成;Limit由高四字节16-19和低四字节的0-15位构成
Limit一共20位,转换为16进制为FFFFF,看G位,如果G位为0,单位为字节, 最大值为000FFFFF;当G位为1,单位为4KB,从0开始算,0到4095,转化为十六进制为FFF,最大值为FFFFFFFF
段描述符的第五位为9或者f才是代码段或者数据段,其他的一定不是代码段或数据段
TYPE域的第11位为0是数据段,为1是代码段
段描述符的第六位大于8一定是代码段,反之小于8一定为数据段
数据段中的A为是否访问过,W为是否可写,E为拓展位,0为向上拓展,1为向下拓展
Base+Limit为有效地址,下图左面红色部分为向上拓展地址有效,向下拓展为相反方向
***DB位 ***
008段权限检查
009代码跨段跳转流程
操作系统提供通用的功能代码,并不会对系统内核数据造成破坏,可以让应用层直接访问,可以用一致代码段来修饰
不希望应用层直接访问的数据用非一致代码段描述
010代码跨段跳转实验
跳转到ntdll.dll,异常
成功,一致代码段允许低权限访问高权限代码段
011长调用与短调用
长调用的段选择符一定是调用门
012调用门
门描述符中的段选择子指向的才是要跳转的存在哪个段
段选择子0008为0环的代码段
通过调用门提权已经是0环权限
014中断门
015陷阱门
IF位为eflag的第九位,如果为0不在接收可屏蔽中断
程序在运行中按键盘会响应,硬件向CPU发送命令,可屏蔽中断,受IF位影响
断电为不可屏蔽中断
016任务段
intel设计初衷是使用TSS实现任务切换,但操作系统不是这么做的
TR寄存器的值从GDT中TSS段描述符中加载得到,TR寄存器中存在TSS的信息
系统描述符TYPE为9或B时是TSS段描述符
TYPE为9时没有加载到TR寄存器中,为B时已经加载到TR寄存器中
link为之前104个字节的段选择子,当切换时硬件自动填充
Cr3和eip还有esp必须要填
TSS段描述符的G位为0,因为TSS以字节为单位
018 任务门
任务门 跨表,任务门在idt表中,TSS段描述符在GDT表中