四;GDTR寄存器与LDTR寄存器五;GDT表与LDT表 GDT表与LDT表当中保存这段描述符(即段寄存器当中不可见部分)其中GDT表的基址存储在GDTR寄存器当中,LDT表的基址保存在GDT表当中。有段寄存器当中的TI位来决定段寄存器当中的Attribute,Base,limit三个部分存储在GDT表当中还是LDT表当中。
六;段描述符 段描述符存储在GDT表或者在LDT表当中,总共64bit。主要结构如下图:
段寄存器解析
我们通过windbg来查看一下。
---------------------------------------------------------------------------
注释:段描述符高4字节对应图中上半部分32bit,低4字节对应图中下半部分32bit。
6.1;P属性 P属性在段描述符,位于高4字节,下标为15的位置。详细图下图:
段寄存器解析
G作用:
G=1,Limit 的单位是4KB,意味着Limit最大的界限是FFFFFFFFH。
6.3;S属性 S属性位置如下图:
段寄存器解析
S=1,段描述符表示代码段或者数据段描述符。
6.4;TYPE属性 TYPE属性如下图:
段寄存器解析
当S=1时,表示该描述符号为代码描述符或者数据描述符。TYPE属性当中11位为0则表示数据段,为0则表示数据段。详细如下图:
数据描述符当中(S=1,TYPE11位=1)
l W表示是否可写,W=0表示不可写,W=1表示可写。
l A表示是否访问过,A=0表示代码没有加载过,A=1表示代码被加载过。
段寄存器解析
l E向下扩展位,E=0,表示向上扩展,E=1,表示向下扩展。
段寄存器解析
6.4.1;系统段描述符 当S=0时,表示该符号位位系统段描述符。在系统段描述符当中不同的TYPE属性表示含义如下图:
段寄存器解析
6.5;DPL属性 该属性只有两种值,00和11。具体内容以后分解
D/B属性作用:
l 对CS段影响
n D=1,采用32bit寻址方式
n D=0,采用32bit寻址方式
l 对SS段影响
n D=1,隐式堆栈访问指令,使用32bit堆栈指针寄存器ESP
n D=1,隐式堆栈访问指令,使用16bit堆栈指针寄存器SP
l 向下扩展的数据段影响
n D=1,段上线为4GB
n D=0,段上线为64KB
段寄存器解析
Limit部分:
段寄存器解析
Attribute部分:
段寄存器解析