一、知识点回顾
在前面的课程中我们学习了MOV和LES等修改段寄存器的指令,当时老师说过,CS寄存器比较特殊,不能用MOV和"LCS"进行修改,原因是CS和EIP共同决定下一条指令的地址,要修改CS,就必须同时修改EIP,这也是X86没有提供"LCS"指令的原因。
二、JMP FAR的调用过程
三、练习
1.00cffb00`0000ffff (复制一个段描述符)
答:P=1,DPL=11,S=1,TYPE=1011
可知是3环权限,非一致代码段的段寄存器
已知:CPL=11,
测试 :设置RPL = 3 ,GDL=0 ,Index=4
JMP 0x23:0x777D0F5C
结果:正常 (CPL=DPL=RPL=3)
测试 :设置RPL = 0 ,GDL=0 ,Index=4
JMP 0x20:0x777D0F5C
结果:失败(CPL=0 DPL=3 RPL=0)
2.00209b00`00000000 (复制一个段描述符)
答:P=1,DPL=0,S=1,TYPE=1011
可知是0环权限,非一致代码段的段寄存器
已知:CPL=11,
测试 :设置RPL = 3 ,GDL=0 ,Index=2
JMP 0x13:0x777D0F5C
结果:失败 (DPL=0,CPL=RPL=3)
测试 :设置RPL = 0 ,GDL=0 ,Index=2
JMP 0x10:0x777D0F5C
结果:失败(CPL=RPL=0, DPL=3 )