标签:查表 col 直接 二进制 提升 代码执行 拆分 任务 操作
以下面代码为例,看CPU在跳转过程做了什么操作。
jmp 0x20,0x004183d7
0x20的二进制形式 0000_0000_0010_0000;
RPL=00;
TI=0;
INDEX=4;
TI=0,所以查GDT表;
INDEX=4,根据索引找到对应的段描述符;
四种情况可以跳转:代码段,调用门,TSS任务段,任务门;
数据段就不行,没有jmp数据段的;
如果是非一致代码段,要求:CPL=DPL,并且,RPL<=DPL;
如果是一致代码段,要求:CPL>=DPL;
通过上面的权限检查后,CPU会将段描述符加载到CS段寄存器中;
CPU将CS.Base+Offset的值写入EIP,然后执行CS:EIP指令;
-------------------------------------------
滴水中级--代码跨段跳转流程
标签:查表 col 直接 二进制 提升 代码执行 拆分 任务 操作
原文地址:https://www.cnblogs.com/a-s-m/p/12764051.html