对于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函数解锁。

驱动层hook系统函数的时,如何屏蔽掉只读属性?的更多相关文章

  1. sharepoint 2013基于AD的Form表单登录(三)——选择用户时,屏蔽掉AD。

    //来源:http://www.cnblogs.com/lrforever/p/3695820.html 隐藏AD人员选择,$ad.IsVisible设置为true,则显示出AD里用户 $cpm = ...

  2. Monkey进行测试时如何屏蔽掉状态栏和音量键

    我在学习的过程中使用简单的点击命令总是会触发到音量键和状态栏,由于我的测试机是虚拟按键所以也会触碰到 接下来说一下解决办法 全屏状态  adb shell settings put global po ...

  3. 14.LINUX-platform机制实现驱动层分离(详解)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 本节目标:        学习platform机制,如何实现驱动层分离 1.先来看看我们之前分析输入子系统的分层概念,如下图所示: 如上图所示,分 ...

  4. 2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  5. 驱动开发:内核层InlineHook挂钩函数

    在上一章<驱动开发:内核LDE64引擎计算汇编长度>中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函 ...

  6. hook键盘驱动中的分发函数实现键盘输入数据的拦截

    我自己在看<寒江独钓>这本书的时候,书中除了给出了利用过滤的方式来拦截键盘数据之外,也提到了另外一种方法,就是hook键盘分发函数,将它替换成我们自己的,然后再自己的分发函数中获取这个数据 ...

  7. Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯

    minifilter是sfilter后微软推出的过滤驱动框架.相比于sfilter,他更容易使用,需要程序员做的编码更简洁. 系统为minifilter专门制作了一个过滤管理器,这个管理器本身其实是一 ...

  8. Android应用程序框架层和系统运行库层日志系统源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...

  9. 4.5 HOOK分发函数

    4.5 HOOK分发函数 本节开始深入的探讨键盘的过滤与反过滤.有趣的是,无论是过滤还是反过 滤,其原理都是进行过滤.取胜的关键在于:谁将第一个得到信息. 黑客可能会通过修改一个已经存在的驱动对象(比 ...

随机推荐

  1. nginx防DDOS、cc、爬虫攻击

    一.防止DDOS.CC攻击 http { limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_nam ...

  2. windows下安装jenkins初级(1)

    这里是基于Windows系统下安装Jenkins 首先下载jenkins 下载地址:https://jenkins.io/download/ 选择所需要的系统 我这里选择Windows 开始安装 一直 ...

  3. Go 静态类型声明

    Go 静态类型声明 package main import "fmt" func main() { var x float64 x = 20.0 fmt.Println(x) fm ...

  4. delphi windows操作

    输入 procedure TypeKeyString(s: string); var c: Char; i: integer; off: integer; vkw: Word; begin to Le ...

  5. hdu多校第八场 1010(hdu6666) Quailty and CCPC 排序/签到

    题意: CCPC前10%能得金牌,给定队伍解题数和罚时,问你有没有一个队伍如果向上取整就金了,四舍五入就银了. 题解: 排序后按题意求解即可. #include<iostream> #in ...

  6. python从入门到大神---1、初始化实例、类属性、方法

    python从入门到大神---1.初始化实例.类属性.方法 一.总结 一句话总结: 方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f() 1 ...

  7. PMP项目管理——项目范围管理-规划范围管理

    规划范围管理是为记录如何定义.确认和控制项目范围及产品范围,而创建范围管理计划的过程.主要作用是,在整个项目期间对如何管理范围提供指南和方向.制定范围管理计划和细化项目范围始于对下列信息的分析:项目章 ...

  8. Java-Class-C:org.springframework.web.client.RestTemplate

    ylbtech-Java-Class-C:org.springframework.web.client.RestTemplate 1.返回顶部 1. org.springframework.web.c ...

  9. SpringBoot通过maven打包成jar,设定主清单属性。

    文章目录 原来普通的jar包一直是 <build> <plugins> <plugin> <groupId>org.apache.maven.plugi ...

  10. 关于double的输入输出

    double定义的变量输入的时候一定要%lf输入,要是%f输入的话,得到的结果会是0 float输入的时候是%f 但是在输出的时候%lf和%f都可以输出 建议使用double类型时,用%lf输入,%f ...