使用WinDbg调试内核

知识点

WinDbg是微软提供的一个免费调试器,支持内核调试,也具有监控Windows系统交互的功能。

**驱动与内核代码:**Windows设备驱动简称为驱动,他让第三方开发商在Windows内核模式下运行代码。驱动程序常驻与内存,并且负责响应用户态程序的请求,而且应用程序不直接与驱动程序通信,而是直接访问设备对象,向具体的物理设备发送请求。设备对象由驱动程序创建和销毁,可以被用户态的程序直接访问,但他们并不一定是真实的物理设备。为了系统能正常工作,驱动程序必须加载到内核空间,这与DLL需要加载到进程空间道理相同,当驱动被首次加载时,DriverEntry函数将被调用。

与DLL通过导出函数表来提供其功能不同,驱动程序通过注册回调函数来提供功能。当用户态的应用程序请求一个服务时,这些回调函数将被调用。回调函数在DriverEntry程序中被注册。Window会为每个条创建一个驱动对象,并以参数形式将其传递给DriverEntry函数,DriverEntry函数用回调函数填充这个驱动对象。然后DriverEntry会创建一个可以被用户态应用程序访问的设备对象,应用程序与去当的交互请求都通过这个设备对象进行。

考虑到来自用户态应用程序的一个读取数据的请求。最终这个请求发送到负责管理硬件并存储读入数据的驱动程序。首先,用户态的应用程序应该获得该硬件设备的一个文件句柄,然后再该具柄上调用函数ReadFile,接着内核会处理ReadFile函数的请求,最终由驱动程序的回调函数来响应对IO设备的读请求。七个球内核态的而已组建最常见函数时DeviceIoControl,它是从用户态模块到内核折别的一种通用请求方法,使用该函数时,用户态应用程序传递一个任意长度的缓冲区数据作为输入,并且接收一个任意长度的缓冲区作为输出。

**安装内核调试:**由于运行内核调试时操作系统会被冻结,因此我们需要Vmware来进行这一操作,与用户态调试不同,内核调试需要一些初始化设置。首先要在虚拟机系统中开启内核调试,然后配置Vmware使虚拟机与宿主系统之间有一条虚拟化的串口,同时还应该配置宿主系统中的WinDbg。详细的配置方法在网上能搜索到,在这里就不赘述了 。

boot.ini

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional with Kernel Debugging" /noexecute=optin /fastdetect /debug /debugport=COM1 /baudrate=115200

**WinDbg读取内存中的数据:**通过再WinDbg的内存窗口输入如下指令来读取程序数据或堆栈等内存位置&

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值