码迷,mamicode.com
首页 > 其他好文 > 详细

驱动框架理解

时间:2016-04-03 13:17:22      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

  • 概述

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。

 

驱动框架理解

标签:

原文地址:http://www.cnblogs.com/predator-wang/p/5349590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!