段寄存器总共有96bit,可见部分16bit。
l Selector:16bit 可见部分,段选择子
l Attribute:16bit 不可见部分,表示段属性,表示了当前段寄存器是可读的还是可写的还是可执行的。
l Base:32bit 不可见部分,表示基址,段从那里开始
l Limit:32bit 不可见部分,表示基址的长度,base + limit 可以确定一个段的大小。
ES,CS,SS,DS,FS,GS,LDTR,TR……
Selector段选择子,本质上就是有一个数字值,主要作用是通过它来构建段寄存器当中的不可见部分。该部分内容功能如下图:
l Index:在GDT数组或LDT数组当中的索引号(3~15bit)
l TI:当TI=0则表示不可见内容存放在GDT表当中。TI=1,则在LDT表当中。(2bit)
l RPL:请求特权级。以什么样的权限区访问段。(0~1bit)
参考连接:https://blog.csdn.net/jadeshu/article/details/72837230
GDT表与LDT表当中保存这段描述符(即段寄存器当中不可见部分)其中GDT表的基址存储在GDTR寄存器当中,LDT表的基址保存在GDT表当中。由段寄存器当中的TI位来决定段寄存器当中的Attribute,Base,limit三个部分存储在GDT表当中还是LDT表当中。
段描述符存储在GDT表或者在LDT表当中,总共64bit。主要结构如下图:
我们通过windbg来查看一下。
---------------------------------------------------------------------------
注释:段描述符高4字节对应图中上半部分32bit,低4字节对应图中下半部分32bit。
P属性在段描述符,位于高4字节,下标为15的位置。详细图下图:
P属性作业:
P=1 段描述符有效,P=0 段描述符无效。
G属性位置如下图:
G作用:
G=0,Limit 的单位是字节,意味着Limit最大的界限是000FFFFFH。
G=1,Limit 的单位是4KB,意味着Limit最大的界限是FFFFFFFFH。
S属性位置如下图:
S属性作用:
S=1,段描述符表示代码段或者数据段描述符。
S=0,段描述符表示系统段描述符。
TYPE属性如下图:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-6-1 16:24
被天象独行编辑
,原因: