CF 16-0代码异常被cf禁赛和封号是一个意思吗一天

用于购买腾讯所有业务及游戏道具

充值游戏点券驰骋游戏世界

开通包月服务,享受精彩在线生活

当我们用汇编读写某一个地址时:

注意:GS 一走调试就必须进0环进0环后被内核清空

3、段描述符与段选择子

GDT(全局描述符表)和LDT(局部描述符表)

当我们执行类似MOV DS,AX指令时CPU会查表,根据AX的值来决定查找GDT还是LDT、查找表的什么位置、查多少数据

2)gdtr寄存器:存放GDT的位置和GDT的大小

GDT表里存放的数据就是段描述符,段描述符有8个字节64位结构如下

S=1是代码或数据段描述符

当S=1时根据Type区分是代码段还是数据段,如下表

S=0是系统段描述符系统描述符有如下类型

段描述符与段寄存器的对应关系

如果G=0,则在余下高位补0则最高为000FFFFF;如果G=1,则在余下高位补1则最高为FFFFFFFF

16位嘚段描述符,该描述符指向了定义该段的段描述符结构如下

0x0023二进制为 0000 0000 0010 0011

Index:0000 0000 0010 0  查GDT的第4个

Base31:24 0000 0000

Base23:16 0000 0000

第二,S=1说明是代码段或数据段

第四,DPL=RPL 如果CPL<=DPL(CPL后面介紹)则可以将GDT中的这个段描述符加载到段寄存器DS中

7)除了MOV指令我们还可以使用LES、LSS、LDS、LFS、LGS指令修改寄存器.

CS不能通过上述的指令进行修改,CS为代码段CS的改变会导致EIP的改变,要改CS必须要保证CS与EIP一起改。

4、段描述符的D/B位

情况一:对CS段的影响

前缀67 改变寻址方式

情况二:对SS段的影响

情况三:向下拓展的数据段

低两位为11说明当前程序为ring3的。

DPL存储在段寄存器中规定了访问该段所需要的特权级别,描述的是访问这個段需要什么权限

如果AX指向的段DPL=0,当前程序的CPL=3则这条指令会执行失败。

RPL是针对段选择子而言的每个段的选择子都有自己的RPL,描述的昰用什么权限去访问一个段

指向的是同一个段描述符,但RPL是不一样的

假设当前的程序处于ring0,也就是CPL=0

8、代码间的跳转(段间跳转)

同时修改CS和EIP的指令

指令格式 JMP 段选择子:要跳转的地址

第一步拆分段选择子0x20

第二步,查表得到段描述符

Index = 4 对应的段描述符如果找到的段描述符是玳码段、调用门、TSS任务段、任务门这四种,是可以跳转的注意:后面三种都是系统段描述符。

第四步加载段描述符,通过上面的权限檢查后CPU会将段描述符加载到CS段寄存器中。

9、关于一致代码段和非一致代码段

1)一致代码段也叫共享段,特权级高的程序不允许访问特權级低的数据(核心态不能访问用户态的程序);特权级低的程序可以访问特权级高的数据但特权级不会改变。

2)非一致代码段也叫普通代码段,只允许同级访问

3)直接对代码段进行JMP或者CALL的操作,无论目标是一致代码段还是非一致代码段CPL都不会发生改变;如果要提升CPL权限,只能通过调用门

1)找一个非一致代码段描述符

可以发现EIP和CS同时发生了变化。

段选择子应该为 0x00B 段选择子的RPL=3

上述段描述符的DPL=0,是非一致代码段跳转应该会失败,如下

4)挑一个或者构造一个一致代码段00cf9d00`0000ffff如下图

DPL=0,段选择子构造为0x004B RPL=3Index=9 ,程序的CPL=3由于是一致代码段可以執行成功,如下

参考资料

 

随机推荐