首页 > 其他分享 >WinDbg调试基础教程-用户模式

WinDbg调试基础教程-用户模式

时间:2024-01-10 11:56:44浏览次数:25  
标签:WinDbg 00007ffb notepad deferred 基础教程 调试 调试器

在前面的文章中,介绍了如何使用WinDbg分析蓝屏原因

https://www.cnblogs.com/zhaotianff/p/15150244.html

 

不过那会都是在网上找的资料,东拼西凑出来,并没有系统的去学习WinDbg。

最近在学习内核开发这一块的内容,刚好要用到WinDbg,所以这里找资料进行系统的入门一下,做个总结。

 

本文内容是基于用户模式下的调试,后面的文章中,会介绍内核模式下的调试。

 

Windows调试工具(Debugging Tools for Windows)

Debugging Tools for Windows由调试器、工具以及软件包中调试器的相关文档组成。这个工具包可以作为Windows SDK或者WDK的一部分安装。

工具包中包括四个调试器:Cdb.exe、Ntsd.exe、Kd.exe和WinDbg.exe。

本文只详细介绍WinDbg,其它工具只做简单介绍。

 

Cdb.exe和Ntsd.exe

Cdb和Ntsd是用户模式的、基于控制台的调试器。它们能够被附加到进程上,就像别的用户模式调试器一样。这两者都有控制台用户界面一键入一条命令,得到一个回应,如此这般地重复。这两者之间唯一的区别在于,如果从控制台窗口启动,Cdb会直接用原来那个窗口,而Ntsd会打开一个新的窗口。其他方面它们都一样。

 

Kd.exe

Kd是具有控制台用户界面的内核调试器,能够被附加到本地内核或者另一台机器上。

 

WinDbg.exe

WinDbg是唯一一个具有图形用户界面的调试器。根据从菜单所做的选择,或者启动时指定的命令行参数,它能够进行用户模式和内核模式调试。

本文是基于用户模式的调试。

 

 

WinDbg简介

像平常在Visual Studio中调试时,大部分的功能是借助菜单或按钮实现,WinDbg建立在命令之上。

用户输入一个命令,调试器用文本描述命令执行的结果给出响应。

在GUI模式下,一些结果用专门的窗口进行显示,比如局部变量、栈、线程等。

正是因为这种调试模式,所以WinDbg学习的门槛就要相对高一些,得记这些命令。

 

WinDbg支持三类命令:

1、内部命令

这些命令内建于调试器之中,操作被调试的目标

2、元命令

这些命令以(.)开头,操作调试进程自身,不直接操作被调试的目标。

3、扩展命令

这些命令以(!)开头,为调试器提供了很多功能。所有扩展命令均在外部DLL中实现。 默认情况下,调试器加载一组预定义的扩展DLL,但是通过使用.load命令可以从Debugger目录或其他目录中加载更多DLL。

 

WinDbg基础调试(用户模式)

有两种方法可以初始化用户模式的调试

1、先打开WinDbg,再通过在“ 文件 ”菜单上,选择“ 启动可执行文件”。程序运行后,会自动附加到WinDbg

2、先运行程序,再打开WinDbg,然后通过“文件”菜单上,选择“附加到进程”,通过选择进程列表里的进程进行附加。

 

这里我们以notepad(Windows记事本)为例进行演示

 

1、打开WinDbg

2、在“ 文件 ”菜单上,选择“ 启动可执行文件”。 在“启动可执行文件”对话框中,转到包含 notepad.exe 的文件夹。 (notepad.exe 文件通常位于 C:\Windows\System32.) 对于 “文件名”,请输入 notepad.exe。 选择“打开” 。进程创建后,会自动中断,WinDbg会自动添加一个断点。

说明:命令窗口是我们主要关注的窗口,它应该始终保持打开状态。这个窗口会显示各种命令的响应结果。

如果不小心关闭了,可以通过工具栏按钮再次打开

 

3、输入 .symfix命令,自动将符号路径设置为指向 Microsoft 符号存储(关于调试符号,可以参考https://www.cnblogs.com/zhaotianff/p/16931797.html

4、输入 x notepad!* 命令查看notepad模块的符号

 1 0:000> x notepad!*
 2 00007ff6`40267460 notepad!<lambda_13f119b44549d7aec2177494846f39c3>::<lambda_invoker_cdecl> (void)
 3 00007ff6`4026eb70 notepad!wistd::__function::__func<<lambda_0186fc037f7c95b0bbb1a993b253897d>,long __cdecl(unsigned short *,unsigned __int64,unsigned __int64 *)>::operator() (void)
 4 00007ff6`402662d0 notepad!<lambda_694cf3250e255c878c64dabf1ae2e40c>::<lambda_invoker_cdecl> (void)
 5 00007ff6`40267bac notepad!ShowOpenSaveDialog (void)
 6 00007ff6`4027d75c notepad!StringLengthWorkerW (void)
 7 00007ff6`4027f5a0 notepad!`WaitForCompletion<Windows::Foundation::IAsyncOperationCompletedHandler<Windows::Security::EnterpriseData::FileProtectionInfo *>,Windows::Foundation::IAsyncOperation<Windows::Security::EnterpriseData::FileProtectionInfo *> >'::`2'::FTMEventDelegate::Invoke (void)
 8 00007ff6`40261380 notepad!wil::details::`dynamic initializer for 'g_header_init_InitializeStagingSRUMFeatureReporting'' (void)
 9 00007ff6`40267570 notepad!wistd::__function::__func<<lambda_0186fc037f7c95b0bbb1a993b253897d>,long __cdecl(unsigned short *,unsigned __int64,unsigned __int64 *)>::destroy (void)

5、使用 ~ 命令,显示被调试进程内部的所有线程信息

1 0:000> ~
2 .  0  Id: 5ba4.950 Suspend: 1 Teb: 00000034`cb6a0000 Unfrozen
3    1  Id: 5ba4.234c Suspend: 1 Teb: 00000034`cb6a2000 Unfrozen
4    2  Id: 5ba4.6834 Suspend: 1 Teb: 00000034`cb6a4000 Unfrozen
5    3  Id: 5ba4.52dc Suspend: 1 Teb: 00000034`cb6a6000 Unfrozen

6、输入 lm 命令,查看已经加载的模块

 1 0:000> lm
 2 start             end                 module name
 3 00007ff6`40260000 00007ff6`40292000   notepad    (pdb symbols)          C:\ProgramData\dbg\sym\notepad.pdb\48F76637AE64DAE8764C8F9F4B27AEA51\notepad.pdb
 4 00007ffb`e0710000 00007ffb`e0995000   COMCTL32   (deferred)             
 5 00007ffb`f29d0000 00007ffb`f29f1000   win32u     (deferred)             
 6 00007ffb`f2b40000 00007ffb`f2bc0000   bcryptPrimitives   (deferred)             
 7 00007ffb`f2bc0000 00007ffb`f2cba000   ucrtbase   (deferred)             
 8 00007ffb`f3440000 00007ffb`f34de000   msvcp_win   (deferred)             
 9 00007ffb`f3550000 00007ffb`f37f3000   KERNELBASE   (deferred)             
10 00007ffb`f3950000 00007ffb`f3ae4000   gdi32full   (deferred)             
11 00007ffb`f3af0000 00007ffb`f3b99000   shcore     (deferred)             
12 00007ffb`f3ba0000 00007ffb`f3d33000   USER32     (deferred)             
13 00007ffb`f3d40000 00007ffb`f3de3000   advapi32   (deferred)             
14 00007ffb`f3f90000 00007ffb`f4042000   KERNEL32   (deferred)             
15 00007ffb`f49a0000 00007ffb`f4a3e000   msvcrt     (deferred)             
16 00007ffb`f4a50000 00007ffb`f4ae7000   sechost    (deferred)             
17 00007ffb`f4d70000 00007ffb`f4e90000   RPCRT4     (deferred)             
18 00007ffb`f4f00000 00007ffb`f4f26000   GDI32      (deferred)             
19 00007ffb`f55f0000 00007ffb`f5926000   combase    (deferred)             
20 00007ffb`f5a40000 00007ffb`f5c30000   ntdll      (pdb symbols)          C:\ProgramData\dbg\sym\ntdll.pdb\CFD10E5F223FEE5F26227CB82510FEDC1\ntdll.pdb

 

标签:WinDbg,00007ffb,notepad,deferred,基础教程,调试,调试器
From: https://www.cnblogs.com/zhaotianff/p/17956010

相关文章

  • API调试怎么做?Apipost快速上手
    前言Apipost是一款支持RESTfulAPI、SOAPAPI、GraphQLAPI等多种API类型,支持HTTPS、WebSocket、gRPC多种通信协议的API调试工具。除此之外,Apipost还提供了自动化测试、团队协作、等多种功能。这些丰富的功能简化了工作流程,提高了研发效率,这也让Apipost成为开发人员首选的API......
  • 如何使用xdebug调试php程序
    1由于我的是phpstudy集成环境,直接找到php.ini的位置:D:\phpstudy_pro\Extensions\php\php7.3.9nts\php.ini在文件尾部直接添加[Xdebug]zend_extension=D:/phpstudy_pro/Extensions/php/php7.0.9nts/ext/php_xdebug.dllxdebug.idekey=phpstormxdebug.remote_enable=Onxde......
  • 使用PyCharm远程调试PY代码
    PyCharm提供了自动Deploy代码到远程服务器,并可以远程调试的功能。配置ssh在pycharm中选择·Tools-》Deployment-》Configuration点击+添加新配置,一般选择sftp作为传输协议为Server命名对SSH进行配置全部填写完毕后,记得测试连接TestConnectionRootpath可以通过自动检测来判......
  • N32G003 A版 SWD口配置成IO了 SWD进不去调试解决方法
    如果你的N32G003A版的SWD口被配置成了IO,并且现在无法通过SWD进行调试,你可以尝试以下方法来恢复SWD调试功能:首先,确保BOOT0引脚为低电平,然后按下复位按钮,这将使芯片复位并进入Bootloader模式。在Bootloader模式下,打开SWD功能。具体来说,需要将系统控制寄存器的SWD_USE_IO时钟控制......
  • vscode调试无法进入代码
    ......
  • K8S_IPV6 POD与数据库联通方法以及快速网络调试的一个思路
    K8S_IPV6POD与数据库联通方法以及快速网络调试的一个思路背景前端时间搭建了一套K8SonlyIPV6SingleStack的测试环境因为自己长时间不搞K8S了,并且IPV6的搭建方法墙内的文档很不完整我这边仅是搭建了一套比较基本的K8S_calico_ingress的单栈IPV6的环境但是同事一直要求......
  • 【环境配置】vscode配置C C++开发和调试环境
    【环境配置】vscode配置CC++开发和调试环境首先区分一些基本概念,其中部分内容可能有所出入,同时本文截至2023/12/31,更多的详细区别,请查阅官方文档MinGW,MinimalistGNUforWindows,前身为mingw32,是一个用于创建MicrosoftWindows应用程序的免费开源软件开发环境。包括GNU编译器......
  • 使用windbg分析dump文件
    使用windbg分析dump文件的步骤。准备工作。打开dump文件。指定符号表文件的路径。指定可执行文件的路径。指定源码文件的路径。在windbg的命令行,输入并执行如下命令.reload,重新加载前述数据文件。!analyze-v,分析dump文件。kbn,得到崩溃时的调用栈信息。.ecxr,打开栈......
  • vscode调试
           1{2//使用IntelliSense了解相关属性。3//悬停以查看现有属性的描述。4//欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=8303875"version":"0.2.0",6"configurations":[7{8......
  • Xcode真机调试之unable to install
     当连接真机运行,xcode出现unabletolaunchxxx,此时我们可以点击detail来查看详情。DetailsUnabletoinstall"XXX"Domain:com.apple.dt.MobileDeviceErrorDomainCode:-402653103--Couldnotinspecttheapplicationpackage.Domain:com.apple.dt.MobileDeviceEr......