1.WinDbg
1.1WinDbg介绍
WinDbg全称Debugging Tools for Windows,是windows平台下的调试工具。
获取Windbg的三种途径:
(1)在Visual Studio安装时安装Windows Driver Kit(WDK)。WDK中包含WinDbg。
(2)安装Windows Software Development Kit (SDK)。SDK中包含WinDbg。下载地址
(3)如果只下载单独的WinDbg,先下载SDK,在安装过程中选择“Debugging Tools for Windows”,同时勾掉其他选择框。
1.2用户模式的WinDbg
WinDbg有两种类型:内核模式调试器和用户模式调试器。内核模式用于调试Windows内核以及驱动程序。用户模式用于调试用户程序,本文主要介绍用户模式的调试器,内核模式调试器的使用方法可在微软官网查找。
1.2.1无代码情况下调试
(1)打开WinDbg.exe
(2)在File菜单中选择Open Executable, 在 Open Executable 对话框中选择notepad.exe(C:\Windows\System32),点击Open。
(3)在底部窗口中,输入命令:
.sympath srv*
窗口将输出以下内容:
Symbol search path is: srv*
Expanded Symbol search path is: cache*;SRV*https://msdl.microsoft.com/download/symbols
符号搜索路径指示WinDbg查找符号文件(PDB)的地方,通过符号文件调试器可以获取代码模块中的函数名称、变量名等信息。输入如下命令将通知WinDbg进行初始化搜索和加载符号文件动作:
.reload
(4)输入以下命令可查看Notepad.exe模块的符号
x notepad!*
如果看不到任何输出,在此输入.reload命令。
输入以下命令可查看Notepad.exe模块中包含main名称的符号
x notepad!*main*
窗口将输出以下内容:
00a31409 notepad!WinMain (<no parameter info>)
00a331c9 notepad!WinMainCRTStartup (<no parameter info>)
(5)输入以下命令可在notepad!WinMain上打断点:
bu notepad!WinMain
输入以下命令验证断点是否已经设置:
bl
窗口将输出以下内容:
0 e Disable Clear 00a31409 0001 (0001) 0:**** notepad!WinMain
(6)输入以下命令运行Notepad:
g
Nopad将会运行到WinMain函数,并中断。输入以下命令可查看Notepad进程已加载模块列表:
lm
调试器窗口将输出以下内容:
start end module name
00a30000 00a60000 notepad (pdb symbols) C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\notepad.pdb\BAF2EA337470437B9DF28CCDFD3EDEB22\notepad.pdb
6dfa0000 6dff1000 WINSPOOL (deferred)
6e1b0000 6e34e000 COMCTL32 (deferred)
73730000 73739000 VERSION (deferred)
74f10000 74f1c000 CRYPTBASE (deferred)
74f20000 74f80000 SspiCli (deferred)
74f80000 74ffb000 COMDLG32 (deferred)
75100000 75191000 OLEAUT32 (deferred)
75300000 75f4b000 SHELL32 (deferred)
76130000 76220000 RPCRT4 (deferred)
76220000 762c1000 ADVAPI32 (deferred)
76510000 76610000 USER32 (deferred)
76640000 76687000 KERNELBASE (deferred)