首页
社区
课程
招聘
[原创]Windows-保护模式-X86-段寄存器结构分析
2021-6-1 16:16 6610

[原创]Windows-保护模式-X86-段寄存器结构分析

2021-6-1 16:16
6610

Windows-保护模式-X86-段寄存器结构分析

段寄存器结构分析

一;段寄存器内部结构

       段寄存器总共有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

       Selector段选择子,本质上就是有一个数字值,主要作用是通过它来构建段寄存器当中的不可见部分。该部分内容功能如下图:

l  Index:在GDT数组或LDT数组当中的索引号(3~15bit)

l  TI:当TI=0则表示不可见内容存放在GDT表当中。TI=1,则在LDT表当中。(2bit)

l  RPL:请求特权级。以什么样的权限区访问段。(0~1bit)

 


 

四;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的位置。详细图下图:


 

       P属性作业:

       P=1 段描述符有效,P=0 段描述符无效。

6.2;G属性

       G属性位置如下图:

       G作用:

       G=0,Limit 的单位是字节,意味着Limit最大的界限是000FFFFFH。

       G=1,Limit 的单位是4KB,意味着Limit最大的界限是FFFFFFFFH。

6.3;S属性

       S属性位置如下图:

       S属性作用:

       S=1,段描述符表示代码段或者数据段描述符。

       S=0,段描述符表示系统段描述符。


 

6.4;TYPE属性

       TYPE属性如下图:

       TYPE属性的不同含义是根据S属性来决定的。当S=1时和S=0时,TYPE属性的含义时不相同的。

     6.4.1;代码/数据描述符

       当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,表示向下扩展。

当S=1时,表示该描述符号为代码描述符或者数据描述符。TYPE属性当中11位为0则表示数据段,为1则表示代码段

l  A访问位,A=0,没有访问,A=1,访问过

l  R可读位,R=0,不可读,R=1,可读

l  C一致位,C=1 一致代码段,C=0非一致代码段


 

     6.4.2;系统段描述符

       当S=0时,表示该符号位位系统段描述符。在系统段描述符当中不同的TYPE属性表示含义如下图:

 

6.5;DPL属性

       该属性只有两种值,00和11。具体内容以后分解


 

6.6;D/B属性

       D/B位置如下图:

       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


 

七;段描述符对比段寄存器当中不可见部分

       Base部分对应位置如下图:

       Limit部分:

       Attribute部分:



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-6-1 16:24 被天象独行编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (2)
雪    币: 1140
活跃值: (266)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_Chao 2021-6-1 17:11
2
0
又是滴水来的?
雪    币: 2063
活跃值: (3823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lhxdiao 2021-6-1 18:56
3
0
有点老的干货,简称老白干
游客
登录 | 注册 方可回帖
返回