• 使用WinDbg内核调试 分类: windows驱动程序WDM 2013-09-25 14:43 493人阅读 评论(0) 收藏


    1. 首先你要配置好测试环境:参考VMware+Windgb+Win7 内核驱动调试
    2. 在你的主机上配置Symbols
      • 配置sympath,C:UsersAdminDesktopfirstobjchk_win7_x86i386是你编译好的sys目录: SRV*C:Symbols*http://msdl.microsoft.com/download/symbols;C:UsersAdminDesktopfirstobjchk_win7_x86i386
      • 配置Source search path假设文件放在C:UsersAdminDesktopfirst]: C:UsersAdminDesktopfirst
      • 然后在命令行中输入:.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 dislwf.pdbEC9B7590D1BB47A6A6D5383538C2B31A1 toskrnl.pdb
      Compiler: C – front end [13.10 bld 2179] – back end [13.10 bld 2190]      Load Report: public symbols
      d:DebugSymbols dislwf.pdbEC9B7590D1BB47A6A6D5383538C2B31A1 dislwf.pdb

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

      kd> bl

      0 e [d:winddk3790srcgeneralioctlsysfilter.c @ 123]    0001 (0001) ndislwf!DriverEntry

      1 e [d:winddk3790srcgeneralioctlsysfilter.c @ 338]    0001 (0001) ndislwf!SioctlDeviceControl+0×103

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

      kd> bd 1

      kd> bl

      0 e [d:winddk3790srcgeneralioctlsysfilter.c @ 123]    0001 (0001) ndislwf!DriverEntry

      1 d [d:winddk3790srcgeneralioctlsysfilter.c @ 338]    0001 (0001) ndislwf!SioctlDeviceControl+0×103  ·

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

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

    kd> bd 1

    kd> bl

    0 e [d:winddk3790srcgeneralioctlsyssioctl.c @ 123] 0001 (0001) SIoctl!DriverEntry

    1 d [d:winddk3790srcgeneralioctlsyssioctl.c @ 338] 0001 (0001) SIoctl!SioctlDeviceControl+0×103

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

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Elasticsearchheader、Kibana实现对ES的可视化
    记录Elasticsearch 分片恢复问题
    跨域问题处理手册
    MySQLJSON与虚拟列结合使用提升性能
    Mysql 备份恢复与xtrabackup备份
    Delphi中将ShowMessage,MessageDlg, MessageBox,InputBox,InputQuery及任意模态窗口相对主窗口(父窗口、母窗口)居中
    Python里的引用与拷贝规律
    「Codeforces 1644F」Basis
    记录
    swift 标签2
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706792.html
Copyright © 2020-2023  润新知