阅读:1318回复:4
关于cr0的第16位的作用是什么?
:D首先请大家看这个函数,把cr0的第16位清零了。
VOID DisableWriteProtect( PULONG pOldAttr) { ULONG uAttr; _asm { push eax; mov eax, cr0; mov uAttr, eax; and eax, 0FFFEFFFFh; // CR0 16 BIT = 0 mov cr0, eax; pop eax; }; *pOldAttr = uAttr; //保存原有的 CRO 属性 } :D以下是我拷贝的: 从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5 |
|
|
沙发#
发布于:2005-03-15 08:33
80386中是保留的,但在pentium等高档处理机上就被用了,如支持PAE时就用了一位,看看Intel上的Pentium之类高档CPU的手册,你会找到的
|
|
|
板凳#
发布于:2005-03-15 10:22
看来以后我得多看看intel手册了。
|
|
|
地板#
发布于:2005-03-15 22:16
486以后就支持了.只要是为了防止RING0代码修改RING3只读页,也是NT COW的实现基础....
|
|
|
地下室#
发布于:2005-03-21 09:30
感觉这种保护用处不大。改动一下cr0,保护就失效了。ring0就是好啊!
谢谢各位的回答。 |
|
|