2.调试第一个驱动程序
程序员文章站
2022-07-14 16:28:47
...
下面来实战调试前面的已经编译过得first,注意:在此之前要做的工作是设置好windbg。
之前的驱动什么事情也没做,所以加载之后driver会被执行一此一次,然后只有卸载时会执行driverUnload了。这样就没什么可以调试了,为此只能在driver中设置一个断点。
由于驱动加载之前,设置断电不方便所以手工在driver中加入一个断点如下:
#include "ntddk.h"
VOID DriverUnload(PDRIVER_OBJECT driver)
{
DbgPrint("first: our driver is unload\r\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path)
{
#if DBG
_asm int 3
#endif
DbgPrint("hello: our driver is run\r\n");
driver->DriverUnload=DriverUnload;
return STATUS_SUCCESS;
}
这里的int 3是一个汇编指令,执行到它的时候会断下来,等于手工设置了一个断点,但是这样的代码如果不是在调试状态下运行会直接蓝屏,所以加上宏调dbg调试,保证只有调试版本这条语句才能被编译,这是一个有用的技巧。
2.使用驱动加载工具,加载编译过得driver.sys,运行后windbg会直接断下来如图。
断点弹出后就可以设置新的断电,同时可以打开watch窗口观察和修改所有变量的值。
(1) 在kd>后输入g后按回车,能使中断的程序继续执行。
(2) 选择菜单“debug->break” 使当前被调试系统终端下来。这是设置断点的前提下。
(3) 将光标移动到代码某一行上按下F9键设置一个断点。系统必须已经中断,否则无法设置和修改断点。再按一次断点可以取消断点。
(4) 按f10单步步过,f11单步步入
(5) 遇到无法找到方法的操作,请打开help菜单查询
上一篇: feature map的可视化
下一篇: 脚本的调试和执行
推荐阅读
-
2.第一个ASP.NET MVC 5.0应用程序
-
2.调试第一个驱动程序
-
2. 初建NodeJs应用及调试
-
Project Reactor 深度解析 - 2. 响应式编程调试,FLow的概念设计以及实现
-
第一个shell脚本+执行+调试
-
Android驱动开发-第一个安卓驱动程序
-
Minor【 PHP框架】2.第一个应用 Hello World
-
gdb调试之---当update时第一个持有的Latch是什么Latch锁?
-
Minor【 PHP框架】2.第一个应用 Hello World,minorhello_PHP教程
-
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个属兑换。写三个函数:1.输入10个数;2.进行处理;3.输出10个数