驱动框架理解

  • 概述

API在某个头文件中定义,被封装在某个DLL中,而这个DLL会进一步被封装在ntdll.dll中(它里面的API叫native api),比如,ReadFile在ntdll.dll中就对应着ntReadFile;然后这个API会通过sysenter的方式进入内核层。

那么,比如对于CreateFile的执行参数,必须告知内核,而这些参数就被封装在IRP中。IRP是一个结构体,它封装了应用层传下的命令和数据。

驱动拿到IRP并进行处理,并把处理结果返回给应用层。

现在随意附加到一个进程当中,看看它的CreateFile调用。

先用windbg连上虚拟机:

然后break下来,执行命令。加载完符号表之后,使用!process 0 0 命令列出所有进程信息

我们附加到explorer.exe,使用命令:

下面使用命令, bp Kernel32!CreateFileW或者bp Kernel32!CreateFileA对CreateFile下断点,如果报错:

我们只需要执行一遍.reload 或者 .reload /user命令即可。

然后F5运行,使虚拟机“复活”,不一会就会断下,此时就离ntdll!NtCreateFile不远了,这时再给ntdll!NtCreateFile下断点,复活虚拟机后不一会就能断下了:

但是,此时我们无法通过F11进入syscall,为了查看更底层的函数,我们只能给更底层的函数下断点:

然后再运行:

此时,我们再尝试往下跟踪,进入IopCreateFile,用kv命令查看一下堆栈调用:

这里,以nt!开头的就是Ring0级的API。

时间: 2024-10-09 18:01:23

驱动框架理解的相关文章

SylixOS nand驱动框架理解

1.适用范围 该应用笔记适用于帮助用户在SylixOS下使用nandflash器件. 2.原理概述 2.1nandflash存储结构 nandflash存储结构如图2-1所示,下面以mini2440开发板上的k9f1g08系列nandflash为例,简单介绍nandflash的存储结构. 图2-1 nandflash存储结构 nandflash的存储结构主要有两个单位:页(page),块(block).每页大小为2K+64字节,2K用来存储数据,64字节用来存储控制信息(OOB区,例如坏块信息.

MTK平台LCD驱动框架详解(一)

许多学习嵌入式的进入MTK开发平台,很多东西都会感到很陌生.在MTK平台上你可以简简单单几分钟就点亮一块屏.加上MTK快速开发的节奏,也很少有时间自己整理学习.如果不思进取,不加班加点学习.很容易就慢慢--.这也难怪有些人说MTK造就了一批懒人,毁掉了一批工程师.但其实都是基于linux开发,核心的东西都是一样一样的.我刚入行业,在迷茫之际,自己整理跟踪源码.想慢慢找回自己熟悉的感觉,掌握MTK的整体框架.也希望能给有需要的人带来些帮助.好吧!前话说到这,开始正题. 本文肯定有不少地方会出现错误

【智能家居篇】wifi驱动的理解(1)——驱动架构

转载请注明出处:http://blog.csdn.net/Righthek 谢谢! 在分析WIFI驱动前,分享一下个人对Linux驱动的一些了解,其实纵观Linux众多的设备驱动,几乎都是以总线为载体,所有的数据传输都是基于总线形式的,即使设备没有所谓的总线接口,但是Linux还是会给它添加一条虚拟总线,如platform总线等:介于WIFI的驱动实在是太庞大了,同时又是基于比较复杂的USB总线,所以建议读者在看此文章之前,先了解一下USB设备驱动和网络设备驱动. 我们要看懂WIFI驱动,首先要

块设备驱动框架详解

一.正确的理解块设备驱动的概念 1.块设备和字符设备的差异 (1)块和字符是两种不同的访问设备的策略 (2)同一个设备可以同时支持块和字符两种访问策略 (3)设备本身的物理特性决定了哪一种访问策略更适合 (4)块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲 (5)块设备驱动最适合存储设备 2.块设备驱动的特点 (1)字符设备只能顺序访问(如串口发送数据顺序),而块设备可以随机访问(不连续块访问). (2)传统的机械式块设备(如硬盘.DVD)虽然可以随机访问,但是连续访问效率更高,因此块设备

Linux USB驱动框架分析 【转】

转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了.好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发.但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货.当然,还会顺带提一下其他的驱动程序写法. 事实上,Linux的设备驱动都遵循一个惯例——表征驱动程序(用driver更

Linux USB驱动框架分析(2)【转】

转自:http://blog.chinaunix.net/uid-23046336-id-3243543.html 看了http://blog.chinaunix.net/uid-11848011-id-96188.html的驱动框架分析,感觉受益匪浅.对于一些内容,我自己查漏补缺. 首先我们按照顺序,看内核模块的注册以及释放函数如下: 点击(此处)折叠或打开 static int __init usb_skel_init(void) { int result; /* register this

MTK平台LCD驱动框架详解(二)

前篇博客链接:http://blog.csdn.net/xuan_h/article/details/38519975 上篇博文说到了mtkfb_probe函数,本文在说mtkfb_probe函数之前.我还是打算在从应用程序的调用开始分析下具体的调用过程.这是我们理解驱动框架的核心,而并不是简单的接受. 一.驱动核心Fbmem.c(alps\kernel\drivers\video\Fbmem.c)分析 下面先摘取一部分源码,源码包括:入口函数.fb_fops.fb_fops中的open函数.用

linux设备驱动之misc驱动框架源码分析(二)

1.misc_open函数分析 该函数在driver/char/misc.c中,misc.c是驱动框架实现的,这里面的misc_Open函数是misc驱动框架为应用层提供的一个打开misc设备的一个接口. 1.首先我们要知道在misc.c中的misc_init函数中,将misc这种类设备注册成了字符设备驱动.代码如下 static int __init misc_init(void) { int err; #ifdef CONFIG_PROC_FS proc_create("misc"

Windows打印体系结构之打印驱动框架

庐山烟雨浙江潮,未到千般恨不消.到得原来无别事,庐山烟雨浙江潮. 1.2.Windows打印驱动框架 Windows的打印驱动从总体架构上来说,包括一个渲染组件和一个配置组件.我们可以回想一下最开始的总体架构图. 渲染组件就是负责将应用程序传来的每一页的绘制命令(GDI命令)转换成打印机用来渲染的命令数据(打印机才能识别的命令)发送到打印机中. 配置组件又包含一个可以让用户进行打选项配置的用户接口组件和一个将打印机的配置和特征传递给应用程序的程序接口. 而相较于Windows的其他硬件设备,比较