天象独行 发表于 2020-11-12 13:34:58

段寄存器解析

段寄存器结构分析一;段寄存器内部结构       段寄存器总共有96bit,可见部分16bit。





lSelector:16bit 可见部分,段选择子lAttribute:16bit 不可见部分,表示段属性,表示了当前段寄存器是可读的还是可写的还是可执行的。lBase:32bit 不可见部分,表示基址,段从那里开始lLimit:32bit 不可见部分,表示基址的长度,base + limit 可以确定一个段的大小。
二;段寄存器种类





四;GDTR寄存器与LDTR寄存器       参考连接:https://blog.csdn.net/jadeshu/article/details/72837230五;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)lW表示是否可写,W=0表示不可写,W=1表示可写。lA表示是否访问过,A=0表示代码没有加载过,A=1表示代码被加载过。lE向下扩展位,E=0,表示向上扩展,E=1,表示向下扩展。    6.4.1;系统段描述符       当S=0时,表示该符号位位系统段描述符。在系统段描述符当中不同的TYPE属性表示含义如下图:
6.5;DPL属性       该属性只有两种值,00和11。具体内容以后分解
       D/B属性作用:l对CS段影响nD=1,采用32bit寻址方式nD=0,采用32bit寻址方式l对SS段影响nD=1,隐式堆栈访问指令,使用32bit堆栈指针寄存器ESPnD=1,隐式堆栈访问指令,使用16bit堆栈指针寄存器SPl向下扩展的数据段影响nD=1,段上线为4GBnD=0,段上线为64KB
       Limit部分:

       Attribute部分:


页: [1]
查看完整版本: 段寄存器解析