欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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会直接断下来如图。

2.调试第一个驱动程序

断点弹出后就可以设置新的断电,同时可以打开watch窗口观察和修改所有变量的值。

(1) 在kd>后输入g后按回车,能使中断的程序继续执行。

(2) 选择菜单“debug->break” 使当前被调试系统终端下来。这是设置断点的前提下。

(3) 将光标移动到代码某一行上按下F9键设置一个断点。系统必须已经中断,否则无法设置和修改断点。再按一次断点可以取消断点。

(4) 按f10单步步过,f11单步步入
(5) 遇到无法找到方法的操作,请打开help菜单查询