zoukankan      html  css  js  c++  java
  • 使用WinDbg内核调试

    看雪学院,笨笨翻译《使用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”)。现在该断点将会从断点列表中消除。

    就先写这么写。怕到时候测试又忘记了。

  • 相关阅读:
    2016012056+小学四则运算练习软件项目报告
    《构建之法》1,2,16章读后感
    我与软件
    散列函数的应用及其安全性
    EGener2四则运算出题器
    用jar包运行带GUI的java游戏
    关于《构建之法》第四章和第十七章的问题
    2016012070小学四则运算练习软件项目报告
    有关软件工程的一些问题
    300道随机四则运算小程序(java编写)
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1905261.html
Copyright © 2011-2022 走看看