对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向只读页面执行写操作;当该位复位时则反之。因此,在写前把设置该位就可以

  1. cli
  2. mov eax, cr0
  3. and eax, -65537             ; fffeffffH
  4. mov cr0, eax

写完后,再把该位设置回去:

  1. mov cr0, eax
  2. sti
  1. 主要是设置cr0的WP(Write Protect)位来禁止内存的只读保护。使用以下两个函数设置cr0
  2. _inline void WPOFF()
  3. {
  4. ULONG uAttr;
  5. _asm
  6. {
  7. cli
  8. push eax
  9. mov eax, cr0
  10. mov g_uCr0, eax
  11. and eax, 0FFFEFFFFh // CR0 16 BIT = 0
  12. mov cr0, eax
  13. pop eax
  14. };
  15. }
  16. _inline void WPON()
  17. {
  18. _asm
  19. {
  20. push eax
  21. mov eax, g_uCr0 //恢復原有 CR0 屬性
  22. mov cr0, eax
  23. pop eax
  24. sti
  25. };
  26. }

但修改的时候要注意:
1.“提升中断请求级”到DPC,屏蔽APC和普通优先级别的中断。更重要的是防止线程调度(CPU调度程序是在DPC级别),因为修改cr0的时候被中断或切换,会造出以外的结果(蓝屏死机)。使用KeRaiseIrqlToDpcLevel提高中断请求级到DPC,KeLowerIrql恢复到原中断级。
2.对于多CPU的系统,为了防止被切换到另一个CPU上运行程序,此时要加内核锁。使用KeAcquireSpinLock函数上锁,KeReleaseSpinLock函数解锁。

最新文章

  1. 集合(set)-Python3
  2. class中new与未new的区别 类对象占用空间--转载
  3. javascript运算符——条件、逗号、赋值、()和void运算符
  4. #8.10.16总结# 属性选择符 伪对象选择符 CSS的常用样式
  5. js中各种宽高
  6. 【原创】14. MYSQL++之SSQLS(原理解析)
  7. Length of Last Word
  8. hbase0.96与hive0.12整合高可靠文档及问题总结
  9. Lua运算符
  10. HDU_2055——刷题不要使用fflush()
  11. 关于覆盖Object中的hashCode, equals和toString
  12. vue-router 中router-view不能渲染
  13. [array] leetcode - 42. Trapping Rain Water - Hard
  14. TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve
  15. 深度学习框架Tensor张量的操作使用
  16. 【LeetCode每天一题】Substring with Concatenation of All Words(具备列表中所有单词的字串)
  17. leetcode-algorithms-35 Search Insert Position
  18. Linux中Postfix邮件接收配置(四)
  19. 【51nod】1655 染色问题
  20. 【php】基础学习3

热门文章

  1. Window10 64bit Tomcat9 安装
  2. 2019牛客暑期多校训练营(第六场)Palindrome Mouse 回文树+dfs
  3. Linux --赋予普通用户root 权限
  4. spark运行任务报错:Container [...] is running beyond physical memory limits. Current usage: 3.0 GB of 3 GB physical memory used; 5.0 GB of 6.3 GB virtual memory used. Killing container.
  5. 34. Thread类的常用方法
  6. C#/.NET 实现的多屏联动,多屏共享,显示到指定屏幕上
  7. delphi Copy函数 和 Pos函数
  8. 依赖背包变形(经典)——poj1155
  9. NX二次开发-UFUN单对象选择对话框UF_UI_select_with_single_dialog
  10. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded2