zoukankan      html  css  js  c++  java
  • 使用WinDbg调试入门(内核模式)

    windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中。这里我们提供了一些实践练习,可以帮助您开始使用windbg作为内核模式调试器。

    设置内核模式调试

    内核模式调试环境通常有两台计算机:主机和目标计算机。调试器在主机上运行,正在调试的代码在目标计算机上运行。主机和目标通过调试电缆连接。Windows调试程序支持以下类型的电缆进行调试:

    • Ethernet
    • USB 2.0
    • USB 3.0
    • 1394
    • Serial (also called null modem)
    如果目标计算机运行的是Windows8或更高版本,则可以使用任何类型的调试电缆,包括以太网。此图说明通过以太网电缆连接调试的主机和目标计算机。
     

    如果目标计算机运行的Windows版本早于Windows 8,则不能使用以太网进行调试;必须使用USB、1394或串行。此图说明了通过USB、1394或串行调试电缆连接的主机和目标计算机。

    建立内核模式调试会话

    在设置好主机和目标计算机并用调试电缆将它们连接起来之后,您可以按照用于设置的同一主题中的说明建立内核模式调试会话。例如,如果您决定设置主机和目标计算机以通过以太网进行调试,参考《通过网线手动设置内核模式调试》。同样,如果您决定设置主机和目标计算机以通过USB 2.0进行调试,您可以找到建立内核模式调试会话的说明,参考《通过USB 2.0电缆手动设置内核模式调试

    开始调试

    1、在主机上,打开windbg并与目标计算机建立内核模式调试会话。

    2、在windbg中,从帮助菜单中选择内容。这将打开调试器文档chm文件。调试程序文档也可以在这里在线获得。

    3、当建立内核模式调试会话时,windbg可能会自动进入目标计算机。如果windbg尚未插入,请从“调试”菜单中选择“中断”。

    4、在windbg窗口底部附近的命令行中,输入以下命令:

     

    符号搜索路径告诉windbg在哪里查找符号(pdb)文件。调试器需要符号文件来获取有关代码模块(函数名、变量名等)的信息。输入此命令,通知windbg执行符号文件的初始查找和加载:

    .reload

    5、查看加载模块的列表,请输入以下命令:

    lm

    6、让目标计算机运行,请输入以下命令:g

    7、要再次打断,请从“调试”菜单中选择“打断”。

    8、输入此命令以检查NT模块中的_FILE_OBJECT

    dt nt!_FILE_OBJECT

     

    9、输入此命令检查NT模块中的某些符号:

    x nt!*CreateProcess*

    10、输入此命令以在MmCreateProcessAddressSpace:处放置断点:

    bu nt!MmCreateProcessAddressSpace

    输入 g 让目标机运行

    11、如果目标计算机没有立即进入调试器,请在目标计算机上执行一些操作(例如,打开记事本)。调用mmcreateProcessAddressSpace时,目标计算机将进入调试器。要查看堆栈跟踪,请输入以下命令:

    .reload

    k

    12、在“视图”菜单上,选择“反汇编”。

    在“调试”菜单上,选择“跳过”(或按F10)。在观察反汇编窗口时,再输入几次STEP命令。

    13、通过输入以下命令清除断点: bc *

    输入g让目标计算机运行。从“调试”菜单中选择“中断”或按Ctrl-Break再次中断。

    14、查看所有进程的列表,请输入以下命令: !process 0 0

    15、复制一个进程的地址,然后输入以下命令:!process Address 2

     For example: !process ffffe00000d5290 2

     

    16、复制一个线程的地址,然后输入以下命令:!thread Address

     For example: !thread ffffe00000e6d080

     

     17、查看即插即用设备树中的所有设备节点,请输入以下命令: !devnode 0 1

     

    18、查看设备节点及其硬件资源,请输入以下命令:!devnode 0 9

    19、查看服务名称为磁盘的设备节点,请输入以下命令:!devnode 0 1 disk

     

    20、复制devnode 0 1输出显示节点的物理设备对象(PDO)的地址,然后输入以下命令: !devstack PdoAddress

    For example: PdoAddress!devstack 0xffffe00001159610

    21、获取有关driver disk.sys的信息,请输入以下命令:!drvobj disk 2

     

    22、drvobj的输出显示调度例程的地址:例如,classpnp!类别全局显示。要在ClassGlobalDispatch上设置和验证断点,请输入以下命令: bu CLASSPNP!ClassGlobalDispatch bl

    输入g让目标计算机运行。 如果目标计算机没有立即进入调试器,请在目标计算机上执行一些操作(例如,打开记事本并保存文件)。调用ClassGlobalDispatch时,目标计算机将进入调试器。要查看堆栈跟踪,请输入以下命令:.reload k

    23、结束调试会话,请输入以下命令:qd

  • 相关阅读:
    ZRender实现粒子网格动画实战
    线段树专题—ZOJ1610 Count the Colors
    LeetCode Recover Binary Search Tree
    Android跨进程訪问(AIDL服务)
    刘下记录:ImageView.scaleType 属性全解析(含视频)
    myeclipse解决JSP文件里script背景颜色的调整
    hdu 5381 The sum of gcd(线段树+gcd)
    newlisp HTTP Basic Authentication
    codeforces 132C Logo Turtle--- dp dfs
    python代码风格-PEP8
  • 原文地址:https://www.cnblogs.com/yilang/p/11428530.html
Copyright © 2011-2022 走看看