X86保护模式编程总结(4)

CPU标识:

EFLAGE标志位

8086CPU: 第12-15位始终置位

Intel286CPU: 在实模式下,12-15位始终清除

32位CPU: 在实模式下,第15位始终清除,第12-14位具有最后被装入的值.

在保护模式下,第14位具有最后被装入的值,第15位被清除.

第18位: Intel486和pentium置位. Intel386清除.

第21位: 用于确定程序是否可执行CPUID指令

关于特权级:

CPL: 表示当前执行程序CS段的RPL.

RPL: 表示当前程序要访问某个段的请求特权.

DPL: 表示某个段描述符中描述一段的访问特权级

注: 比如当时皇帝的特权是CPL,皇帝要微服私访一个县(DPL),他只用了省级(RPL)的职位就吓到了县官.

CS段寄存器的最低两位保存当前特权级(CPL).这是正在运行的程序的特权级.

SS段寄存器的最底两位也保存CPL的副本.通常,CPL等于正从其中取指令的代码段

的特权级.当控制被转移到具有不同特权级的代码段时,CPL才改变.

段描述符包含被称为描述符特权级(DPL)的字段.DPL是适用于段的特权级.

段选择符包含有被称位请求者特权级(RPL)的字段,RPL是建立该选择符的过程试图去

代表的特权级. 如果RPL低于CPL的特权级,它就是超越CPL.当较高的特权级的程序接收来自较低特权级称许的段选择符时,RPL使存储器访问在较低特权级上执行.

当DPL<=CPL&RPL中较低的特权级时,段寄存器才能由指令装入.

CPL 访问限制

1 所有特权级上的数据段都是可以访问的

2 只有在特权级1-3上的数据段才可访问

3 只有特权级3上的数据段才可访问

指针有效性检查指令:

ARPL: 检查指针的提供者是否被允许访问段

LAR x: 装入访问权,被用来证实指针引用的是有适当特权级和类型的段,操作数表示对应于访问权被检查的描述符的段选择符.((RPL||CPL>DPL)&&段选择符超出描述符表的表限?ZF=0:ZF=1)

LSL: 装入段限,允许软件测试段描述符的段限.如果由段选择符引用的描述符在CPL上是可读的.则此指令将32位的,根据描述符的并置段限字段和G位计算的字节粒度限值装入指定的32位寄存器.门描述符是不可访问的.(装入成功ZF=1,否则为0)

VERR: 读验证,验证段的可读性,如果该段可用CPL读,则ZR=1.

VERW: 写验证, 如果该段可用CPL读,则ZR=1.

你可能感兴趣的:(编程,软件测试)