Windows驱动程序运行时函数的调用
编译器厂商一般在发布其编译器的时候,会连同运行时函数一同发布。Windows驱动程序不能再代码中使用编译器提供的运行时函数,因为大部分运行时函数是基于Win32 API实现的,由于Win 32 API运行在用户模式(RIng3层),驱动程序运行在内核模式(RIng0层),运行在内核模式下的程序不能调用用户模式下提供的API函数的。当然一些少部分的运行时函数并没有调用Win32 API,我们依然可以再驱动程序中去使用它们,比如strcpy等。
Windows提供了内核态的运行时函数,我们应该尽量在驱动程序中使用这些函数。
现在探讨内核程序和应用程序之间的本质区别。除了能用WDK编写内核程序和阅读一部分Windows的内核代码之外,我们还需要了解它们的本质是什么,它们和我们熟悉的应用程序有什么区别。
Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,从Ring0到Ring3(后面简称R0、R1、R2、R3)。R0层拥有最高的权限,R3层拥有最低的权限。按照Intel原有的构想,应用程序工作在R3层,只能访问R3层的数据;操作系统工作在R0层,可以访问所有层的数据;而其他驱动程序位于R1、R2层[多多关注www.hitidc.com],每一层只能访问本层以及权限更低层的数据。
这应该是很好的设计,这样操作系统工作在最核心层,没有其他代码可以修改它;其他驱动程序工作在R1、R2层,有要求则向R0层调用,这样可以有效保障操作系统的安全性。但现在的OS,包括Windows和Linux都没有采用4层权限,而只是使用2层——R0层和R3层,分别来存放操作系统数据和应用程序数据,从而导致一旦驱动加载了,就运行在R0层,就拥有了和操作系统同样的权限,可以做任何事情,而所谓的rootkit也就随之而生了。
rootkit在字面上来理解,是拥有“根权限”的工具。实际上,所有的内核代码都拥有根权限,当然,并不一定它们都叫做rootkit,这要看你用它来做什么。用rootkit技术开发的木马和病毒正在迅速发展,它们往往极难清除,以往杀毒软件可以轻松清除掉系统中病毒的时代似乎已经一去不复返了。
Windows驱动程序运行时函数的调用相关推荐
- 趣谈iOS运行时的方法调用原理
一个成熟的计算机语言必然有丰富的体系,复杂的容错机制,处理逻辑以及判断逻辑.但这些复杂的逻辑都是围绕一个主线丰富和展开的,所以在学习计算机语言的时候,先掌握核心,然后了解其原理,明白程序语言设计的实质 ...
- asm 5 java,java – 使用ASM(5.x)在字节代码中检测运行时的递归方法调用:howto?
问题如下; Java代码中的方法是: Rule foo() { return sequence(foo(), x()); } 这将引发解析循环,当然应该避免;但是,这是合法的: Rule foo() ...
- .NET Worker Service 作为 Windows 服务运行及优雅退出改进
上一篇文章我们了解了如何为 Worker Service 添加 Serilog 日志记录,今天我接着介绍一下如何将 Worker Service 作为 Windows 服务运行. 我曾经在前面一篇文章 ...
- Swift和Objective-C的运行时编程
\ 本文要点 \\ 运行时编程是Objective-C编程人员的重要工具,它提供了一些系统框架的基础.\\t 尽管运行时编程的确移除了不少的样板文本(Boilerplate),使开发人员可以编写更为精 ...
- Taro3.2 适配 React Native 之运行时架构详解
导读 由 58 前端团队主导的 Taro 3 适配 React Native 工作已完成有一段时间了.目前发布了多个体验版,也将在3月底迎来正式版.基于 Taro 的良好架构演变,适配 React N ...
- ART运行时垃圾收集(GC)过程分析
ART运行时与Dalvik虚拟机一样,都使用了Mark-Sweep算法进行垃圾回收,因此它们的垃圾回收流程在总体上是一致的.但是ART运行时对堆的划分更加细致,因而在此基础上实现了更多样的回收策略.不 ...
- 【C++】5.1 编译时的多态性与运行时的多态性
5.1 编译时的多态性与运行时的多态性 1.什么时多态性 [定义] (1)在面向对象方法中,不同对象收到相同的消息时,产生不同的行为(即方法) (2)在C++程序设计中,多态性是指用一个名字定义不同的 ...
- 运行时异常和非运行时异常
[强制]Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理,比如:NullPointerException,IndexOutOfBou ...
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
http://blog.csdn.net/totogo2010/article/details/8081253 Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. ...
最新文章
- 100天后 - 100-days-later
- DNS RR字段含义
- lvs+keepalived实现双实例【双主模型】
- (1 24) 3 java代码_算24点 java代码
- gridreport如何设置打印3次_如何设置光固化3D打印机切片参数
- 《textanalytics》课程简单总结(1):两种word relations——Paradigmatic vs. Syntagmatic...
- dom 生成图片和链接生成二维码
- 知行合一!如何做好项目经理?
- Linux命令--- /dev/null和/dev/tty
- freemarker开发指南
- js语音识别_js 语音识别_js 语音识别库 - 云+社区 - 腾讯云
- ORACLE11.2.0.1升级到11.2.0.3
- HTML常用的标签总结
- 测试手机软件打开速度的app,一加6千分之一秒 百款APP打开速度对比
- 隧道联系测量高程传递水准数据处理流程及说明
- Linksys玩多了,来看看真正的Cisco~技术帖
- “找不到或加载主类”是什么意思?
- 解决linux vi/vim或命令行出现方向键、删除出现乱码
- 既是剧中人,亦是局外客
- Spring Boot安全管理—基于数据库的认证
热门文章
- PKU 学生反馈 3
- JAVA入门级教学之(接口)
- netcore权限控制_netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源...
- win32键盘输入python_python-win32api键盘输入教程
- 怎么用记事本写java_如何用记事本写下第一个Java程序-Fun言
- freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧
- java算程序运行时间_关于计算Java程序运行时间
- python pexpect pxssh scp_python Pexpect 实现输密码 scp 拷贝的方法
- java udp 同一个端口实现收发_Java网络编程之UDP协议
- 一直未运行_【直击一线】延一转三相分离器投运成功,盘活全区生产运行一盘棋...