使用WinDbg内核调试

  1. 首先你要配置好测试环境:参考VMware+Windgb+Win7 内核驱动调试
  2. 在你的主机上配置Symbols
    • 配置sympath,C:\Users\Admin\Desktop\first\objchk_win7_x86\i386是你编译好的sys目录: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;C:\Users\Admin\Desktop\first\objchk_win7_x86\i386
    • 配置Source search path假设文件放在C:\Users\Admin\Desktop\first]: C:\Users\Admin\Desktop\first
    • 然后在命令行中输入:.reload
    • 打开源文件:Ctrl+O
  3. 接着检查是否已经加载sys.dbg,命令为:

    kd> !lmi ndislwf
    Loaded Module Info: [nt]
    Module: ntoskrnl     Base Address: 80a02000

    Symbol Type: PDB      – Symbols loaded successfully from symbol server.
    d:\DebugSymbols\ndislwf.pdb\EC9B7590D1BB47A6A6D5383538C2B31A1\ntoskrnl.pdb
    Compiler: C – front end [13.10 bld 2179] – back end [13.10 bld 2190]      Load Report: public symbols
    d:\DebugSymbols\ndislwf.pdb\EC9B7590D1BB47A6A6D5383538C2B31A1\ndislwf.pdb

  4. 接着如果出现如上的结果,表明可以手动设置断点,否则(个人经验总是不能设置)。假设在ndislwf 的DriverEntry 设置断点。在启动驱动之前,中断在WinDbg的命令窗口,输入:bu ndislwf!DriverEntry
  5. 接下来开始安装测试驱动。若执行到DriverEntry该函数,就会停下来,并且会在代码框中对应的代码中用红色标志,然后按F10可以单步调试。
  6. 如果查看已经设置哪些断点:

    kd> bl

    0 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 123]    0001 (0001) ndislwf!DriverEntry

    1 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 338]    0001 (0001) ndislwf!SioctlDeviceControl+0×103

    注意两件事: 每个断点都有一个号码并且显示出断点状态,“e”是“enabled”,而“d”是“disabled”。假设你希望临时停止使用某个断点。bd (“Disable Breakpoint”) 将会完成它。你只需指定断点号码:

    kd> bd 1

    kd> bl

    0 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 123]    0001 (0001) ndislwf!DriverEntry

    1 d [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 338]    0001 (0001) ndislwf!SioctlDeviceControl+0×103  ·

    相似的方法,永久移除断点号码,使用bc 1 (“Clear Breakpoint”)。现在该断点将会从断点列表中消除。

     

假设你希望临时停止使用某 个断点。bd (“Disable Breakpoint”) 将会完成它。你只需指定断点号码:

kd> bd 1

kd> bl

0 e [d:\winddk\3790\src\general\ioctl\sys\sioctl.c @ 123] 0001 (0001) SIoctl!DriverEntry

1 d [d:\winddk\3790\src\general\ioctl\sys\sioctl.c @ 338] 0001 (0001) SIoctl!SioctlDeviceControl+0×103

  • · 相似的方法,永久移除断 点号码,使用bc 1 (“Clear Breakpoint”)。现在该断点将会从断点列表中消除。
时间: 2025-01-31 10:09:15

使用WinDbg内核调试的相关文章

xp+WinDBG+VMware调试内核

呵呵,搞点突兀的标题而已.其实说的还是如何使用WinDBG和VMware来搭建调试内核的环境而已,这些网上已经有数不清的教程了,不过我喜欢自己亲手写一下.第一,把这个过程写一遍能加深印象,就算以后忘记了也可以有笔记查找,快速想起来.第二.网上的教程很多都是互相抄来抄去,连错误也抄过去了.很典型一个错误就是Baud Rate,前面还写115200,后面就写成了11520了,狂汗! 按照我这篇笔记写的步骤去做,绝对能够成功,并且还能大略地了解到为什么要这样做的原因.第1部分是步骤,如果不想看原因的,

使用Virtual PC进行Windows内核调试

下面以Virtual PC 2004为例,介绍一下利用Virtual PC进行Windows内核调试的详细过程. 1,下载并安装Virtual PC 2004,从略. 2,启动Virutal PC Console(控制台),创建一台新的虚拟PC,安装向导的提示配置硬盘.内存等参数. 3,在刚才创建的虚拟PC上安装操作系统,这个操作系统应该是你要调试的Windows版本.比如你想调试你的驱动程序在Windows Server 2003上出现的问题,那么就安装Windows Server 2003.

FreeBSD中使用串行通信进行远程内核调试

探索在不影响系统性能的情况下,如何远程调试正在目标计算机上运行的 FreeBSD 内核.本文讨论如何使用串行通信端口设置调试环境.如何编译经过修改的内核代码.如何进行调试,并介绍了一些故障诊断提示. 引言 FreeBSD 是从 BSD 衍生而来的高级操作系统,BSD 则是加利福尼亚大学伯克力分校开发的 UNIX 版本.它提供了很高的性能,与其他系统的兼容性更强,并且需要的系统管理更少.FreeBSD 包含了内核级的状态式 (Stateful) IP 防火墙以及许多其他服务,如 IP 代理网关.访

驱动-内核调试,加法后打印不正常

问题描述 内核调试,加法后打印不正常 我在调试MTD驱动的时候,想不明白这打印怎么回事. 解决方案 看相关变量的定义:loff_t: typedef __kernel_loff_t loof_ttypedef long long __kernel_loff_tmtd_part.offset类型为uint64_t其真正类型为unsigned long (32bit CPU)或者unsigned long long (64bit CPU) 你的代码里面有两点需要注意:1. part->offset

Linux内核调试技术——进程D状态死锁检测

Linux的进程存在多种状态,如TASK_RUNNING的运行态.EXIT_DEAD的停止态和TASK_INTERRUPTIBLE的接收信号的等待状态等等(可在include/linux/sched.h中查看).其中有一种状态等待为TASK_UNINTERRUPTIBLE,称为D状态,该种状态下进程不接收信号,只能通过wake_up唤醒.处于这种状态的情况有很多,例如mutex锁就可能会设置进程于该状态,有时候进程在等待某种IO资源就绪时(wait_event机制)会设置进程进入该状态.一般情况

Linux内核调试技术之自构proc

1.简介 在内核中使用printk可以讲调试信息保存在log_buf缓冲区中,可以使用命令 #cat /proc/kmsg 将缓冲区的数区的数数据打印出来,今天我们就来研究一下,自己写kmsg这个文件,我们取名叫做 mymsg. 2.查看内核中 /proc/kmsg怎么写的! 在Proc_misc.c (fs\proc) 文件中: void __init proc_misc_init(void){      .........................          struct pr

6步确保 windbg 成功调试 .net

原文地址:http://blogs.msdn.com/b/dougste/archive/2011/10/31/tips-for-successful-net-debugging-with-windbg.aspx 1.windbg 的版本一致.    分析时.dump内存时的 windbg 版本一致,且保证是完整的内存文件.使用 .dump /ma c:\dump.dmp 执行 2.检查 CLR的版本要一致.    检查 mscorwks.dll (#2.0) 或 clr.dll (#4.0)

Windows7 口令登录过程调试

基本原理 Windows7 以后 Winlogon 进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中完全 可能存在多个登录进程,注销后 Winlogon 进程也会随之结束. Windbg 断点 NtCreateUserProcess 观察 Windows7 启动流程: 我整理的基本进程树如下: smss.exe autochk.exe smss.exe 00000000 0000003c //session 0 Csrss.exe Wininit.exe Services

Win 7系统口令登录过程调试方法

首先介绍Windows 7系统基本原理 Windows7 以后 Winlogon 进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中完全 可能存在多个登录进程,注销后 Winlogon 进程也会随之结束. Windbg 断点 NtCreateUserProcess 观察 Windows7 启动流程: 我整理的基本进程树如下: smss.exe autochk.exe smss.exe 00000000 0000003c //session 0 Csrss.exe Winin