80X86架构中EIP何时等于CR2?取指令时EIP能否等于CR2?
80X86架构中EIP与CR2寄存器的关系问题解答
EIP寄存器何时会等于CR2寄存器?
CR2寄存器的核心作用是保存触发页错误(#PF异常)时的线性地址,只有发生页错误时CPU才会更新CR2的值。EIP等于CR2的场景主要有两种:
- 最常见的场景:CPU尝试取指令时触发页错误。此时EIP指向当前要读取的指令的线性地址,而这个地址刚好是导致页错误的地址,CPU会立即将该地址写入CR2,此时EIP与CR2的值完全相等。
- 极端巧合场景:执行指令过程中(比如访问内存操作数)触发页错误,而该操作数的线性地址恰好和当前EIP的值完全一致,这种情况下也会出现EIP=CR2,但属于极低概率的偶然情况,没有普遍意义。
CPU取指令时是否存在EIP等于CR2的可能性?
存在,就是上述第一种常见场景:在取指令触发页错误的瞬间(还未跳转到页错误异常处理程序之前),EIP仍然指向那个无法正常读取的指令地址,而CR2已经被CPU写入该地址,此时两者的值相等。一旦CPU进入异常处理流程,EIP会被替换为页错误处理程序的入口地址,两者的值就不再相等了。
内容的提问来源于stack exchange,提问作者zhao bao
相关产品推荐
相关产品推荐

