windbg常用命令列表

合集下载

Windows调试工具入门-6(WinDbg内核调试常用命令2)

Windows调试工具入门-6(WinDbg内核调试常用命令2)

WinDbg内核调试常用命令(2)接上一章继续介绍内核调试下的常用命令,这一章主要涉及内存相关、对象相关、驱动设备相关以及蓝屏Dump 相关命令。

介绍每个命令的主要作用,以及常用方式,不会涉及详细的命令参数,目的是能快速上手熟悉内核调试下的常用操作,而不是替代帮助文件。

内存相关内存操作应该是调试最常用的,比如查看内存、修改内存等。

本节介绍内核模式下常用的内存操作命令,大部分是内核模式下特有的命令,诸如db/eb/dt/s等基本内存命令则不会介绍。

!address!address命令显示内存信息,如内存范围、内存权限等。

这条命令在用户模式下也能用,而且显示的信息比较丰富。

!address命令不带参数时,显示所有内存信息。

kd>!address80800000-0026b000Usage KernelSpaceUsageImageImageName ntoskrnl.exe80a6b000-0001f000Usage KernelSpaceUsageImageImageName halacpi.dll......f51d9000-00005000Usage KernelSpaceUsageKernelStackKernelStack81827020:340.7ac......f894f000-00002000Usage KernelSpaceUsageImageImageName swenum.sysf8951000-00256000Usage KernelSpaceUsageNonPagedSystemf8ba8000-07038000Usage KernelSpaceUsageNonPagedPoolExpansionUsage表示内存用途,如内核映像、非分页内存、内核栈、会话空间等。

通过Usage就能大概了解某段内存的使用情况,也为进一步分析内存指明了方向。

!address xxxxxxxx显示指定地址的内存信息。

Windbg命令学习3(lmf和r)

Windbg命令学习3(lmf和r)

Windbg命令学习3(lmf和r)以下的所有⽰例都是加载calc程序1 lmflmf可以列出当前进程中加载的所有DLL⽂件和对应的路径给个例⼦:0:001> lmfstart end module name01000000 0101f000 calc C:\WINDOWS\system32\calc.exe10000000 100b0000 safemon C:\Program Files\360\360Safe\safemon\safemon.dll58fb0000 5917a000 AcGenral C:\WINDOWS\AppPatch\AcGenral.DLL5adc0000 5adf7000 UxTheme C:\WINDOWS\system32\UxTheme.dll5cc30000 5cc56000 ShimEng C:\WINDOWS\system32\ShimEng.dll62c20000 62c29000 LPK C:\WINDOWS\system32\LPK.DLL71a10000 71a18000 WS2HELP C:\WINDOWS\system32\WS2HELP.dll71a20000 71a37000 WS2_32 C:\WINDOWS\system32\WS2_32.dll73640000 7366e000 msctfime C:\WINDOWS\system32\msctfime.ime73fa0000 7400b000 USP10 C:\WINDOWS\system32\USP10.dll74680000 746cc000 MSCTF C:\WINDOWS\system32\MSCTF.dll759d0000 75a7f000 USERENV C:\WINDOWS\system32\USERENV.dll76300000 7631d000 IMM32 C:\WINDOWS\system32\IMM32.DLL765e0000 76673000 CRYPT32 C:\WINDOWS\system32\CRYPT32.dll76680000 76726000 WININET C:\WINDOWS\system32\WININET.dll76990000 76ace000 ole32 C:\WINDOWS\system32\ole32.dll76b10000 76b3a000 WINMM C:\WINDOWS\system32\WINMM.dll76bc0000 76bcb000 PSAPI C:\WINDOWS\system32\PSAPI.DLL76db0000 76dc2000 MSASN1 C:\WINDOWS\system32\MSASN1.dll770f0000 7717b000 OLEAUT32 C:\WINDOWS\system32\OLEAUT32.dll77180000 77283000 comctl32 C:\WINDOWS\WinSxS\x86_mon-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll 77bb0000 77bc5000 MSACM32 C:\WINDOWS\system32\MSACM32.dll77bd0000 77bd8000 VERSION C:\WINDOWS\system32\VERSION.dll77be0000 77c38000 msvcrt C:\WINDOWS\system32\msvcrt.dll77d10000 77da0000 USER32 C:\WINDOWS\system32\USER32.dll77da0000 77e49000 ADVAPI32 C:\WINDOWS\system32\ADVAPI32.dll77e50000 77ee3000 RPCRT4 C:\WINDOWS\system32\RPCRT4.dll77ef0000 77f39000 GDI32 C:\WINDOWS\system32\GDI32.dll77f40000 77fb6000 SHLWAPI C:\WINDOWS\system32\SHLWAPI.dll77fc0000 77fd1000 Secur32 C:\WINDOWS\system32\Secur32.dll7c800000 7c91e000 kernel32 C:\WINDOWS\system32\kernel32.dll7c920000 7c9b3000 ntdll C:\WINDOWS\system32\ntdll.dll7d590000 7dd84000 SHELL32 C:\WINDOWS\system32\SHELL32.dll2.rr命令显⽰或修改寄存器、浮点寄存器、标志位、伪寄存器和预定义别名直接⽤r,会显⽰当前线程的寄存器状态~0 r表⽰显⽰0号线程的寄存器状态~* r会显⽰所有线程的寄存器状态~0 r eax = 0x1可以对1线程进⾏eax赋值~* r eax =0x1,可以对所有线程进⾏eax赋值给个例⼦:0:001> reax=00000009 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246ntdll!DbgBreakPoint:7c92120e cc int 30:001> ~1 reax=00000009 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246ntdll!DbgBreakPoint:7c92120e cc int 30:001> ~0 reax=00000009 ebx=00000000 ecx=002e3a80 edx=0000c0f1 esi=0007fee8 edi=01014018eip=7c92e4f4 esp=0007fde0 ebp=0007fdfc iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246ntdll!KiFastSystemCallRet:7c92e4f4 c3 ret0:001> ~* reax=00000009 ebx=00000000 ecx=002e3a80 edx=0000c0f1 esi=0007fee8 edi=01014018 eip=7c92e4f4 esp=0007fde0 ebp=0007fdfc iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246ntdll!KiFastSystemCallRet:7c92e4f4 c3 reteax=00000009 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005 eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246ntdll!DbgBreakPoint:7c92120e cc int 30:001> r eax = 10:001> reax=00000001 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005 eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246ntdll!DbgBreakPoint:7c92120e cc int 30:001> ~0 r eax =00:001> reax=00000001 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005 eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246ntdll!DbgBreakPoint:7c92120e cc int 30:001> ~* reax=00000000 ebx=00000000 ecx=002e3a80 edx=0000c0f1 esi=0007fee8 edi=01014018 eip=7c92e4f4 esp=0007fde0 ebp=0007fdfc iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246ntdll!KiFastSystemCallRet:7c92e4f4 c3 reteax=00000001 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005 eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246ntdll!DbgBreakPoint:7c92120e cc int 30:001> ~* r eax=90:001> ~* reax=00000009 ebx=00000000 ecx=002e3a80 edx=0000c0f1 esi=0007fee8 edi=01014018 eip=7c92e4f4 esp=0007fde0 ebp=0007fdfc iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246ntdll!KiFastSystemCallRet:7c92e4f4 c3 reteax=00000009 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005 eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246ntdll!DbgBreakPoint:7c92120e cc int 3。

调试程序Windbg

调试程序Windbg

调试程序WindbgWinDbg是微软开发的免费源码级图形界面调试工具,可以调试Win32应用程序,服务器应用程序调试和Kernel模式驱动调试。

本文介绍Windbg在调试Win32应用程序时的常用命令。

1、Windbg的启动Windbg可以从命令行启动,启动命令格式为:windbg [-a] [-g] [-h] [-i] [-k [platform port speed]] [-l[text]] [-m] [-p id [-e event]] [-s[pipe]] [-v] [-w name] [-y path][-z crashfile] [filename[.ext] [arguments]]在WindowsXP/2000操作系统下,可以直接双击Windbg图标启动。

2、打开应用程序被调试的应用程序在汇编和连接时应加入调试信息。

汇编时使用参数/Zi;连接程序使用参数/debug。

开始调试一个应用程序时,首先选择File菜单下的Open Executable命令,在对话框中选择可执行文件。

出现Command 窗口,点击工具栏按钮后,在Command 窗口中显示一组信息,再次点击按钮后,在Command 窗口后出现Source窗口。

3、显示存储单元显示存储单元的按钮是。

点击该按钮后,出现对话框在Address Expression编辑框中填入要察看的地址信息。

地址信息有两种常用的输入方式:(1)指定内存单元地址例如:在Address Expression 中填入0x0040103f,点击按钮OK后出现指定地址开始的内存单元的内容:其中0x0040103F至0x004010BF是Windbg显示以十六进制表示的单元地址,中间用十六进制表示每个字节,右边用ASClI字符表示每个字节。

(2)通过变量名表示例如:在Address Expression 中填入&b_var1,点击按钮OK后出现b_var1开始的内存单元的内容:其中0x00404000地址是变量b_var1所在的单元。

使用Windbg解析dump文件

使用Windbg解析dump文件

使⽤Windbg解析dump⽂件WinDbgOllyDbgSoftICE (已经停⽌更新)虽说WinDbg在⽆源码调试⽅⾯确实⽐较困难,但在调试内核⽅⾯却真的有独到之处。

使⽤Windbg解析dump⽂件1 常⽤的Windbg指令①!analyze -v②kP 可以看函数的⼊参③!for_each_frame dv /t 可以看函数中的局部变量④dc , db 产看某⼀内存中的值可以直接接变量名不过可能需要回溯栈⑤!threads 显⽰所有线程⑥~0s , ~1s 进⼊某个线程⑦!frame ProcessA!FunctionA 查看某⼀变量有时需要。

回溯栈⑧!uniqstack 扩展命令显⽰当前进程中所有线程的调⽤堆栈,除开重复的那些。

⑨!teb 扩展以的格式化后的形式显⽰线程环境块(TEB)的信息。

⑩s-sa 和 s-su 命令搜索未指定的 ASCII 和 Unicode 字符串。

这在检查某段内存是否包含可打印字符时有⽤。

dds、dps 和 dqs 命令显⽰给定范围内存的内容。

该内存被假定为符号表中的⼀连串地址。

相应的符号也会被显⽰出来。

命令显⽰给定范围内存的内容,它们是把内存区域转储出来, 并把内存中每个元素都视为⼀个符号对其进⾏解析,dds是四字节视为⼀个符号,dqs是每8字节视为⼀个符号,dps是根据当前处理器架构来选择最合适的长度.kframes 命令设置堆栈回溯显⽰的默认长度。

默认20k, kb, kd, kp, kP, kv (Display Stack Backtrace) k*命令显⽰给定线程的调⽤堆栈,以及其他相关信息。

通常要结合12)使⽤否则显⽰出来的东西很少.reload /i xxx.dll 忽略.pdb ⽂件版本不匹配的情况。

2 Symbol的设置⽅法2.1 将远程的系统函数的PDB⽂件拷贝到本地「D:\mysymbol」⽬录下SRV*D:\mysymbol*/download/symbols2.2 加载设置的符号⽂件.reload可以使⽤菜单中的 Debug -> Modules 查看有没有加载进来第三章实例实例1 如何调查堆被破坏问题。

Windbg 使用教程

Windbg 使用教程

详解用法详解第30章WinDBG用法WinDBG是个非常强大的调试器,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、调试转储文件、远程调试等等。

WinDBG具有非常大的灵活性和可扩展性,用来满足各种各样的调试需求,比如用户可以自由定义调试事件的处理方式,编写调试扩展模块来定制和补充WinDBG的调试功能。

尽管WinDBG是个典型的窗口程序,但是它的大多数调试功能还是以手工输入命令的方式来工作的。

目前版本的WinDBG共提供了20多条标准命令,140多条元命令(Meta-commands),和难以计数的大量扩展命令。

学习和灵活使用这些命令是学习WinDBG的关键,也是难点。

上一章我们从设计的角度分析了WinDBG,本章将从使用(用户)的角度介绍WinDBG。

我们先介绍工作空间的概念和用法(第1节),然后介绍命令的分类和不同种类的命令提示符(第2节)。

第3节介绍不同的调试模式,也就是如何与不同特征的调试目标建立调试会话。

第4节介绍上下文的概念和在调试时应该如何切换和控制上下文。

第5节介绍调试事件和如何定制调试事件的处理方式。

从第6节到第9节我们将分别介绍如何在WinDBG中完成典型的调试操作,比如控制调试目标(第6节)、设置断点(第7节)、观察栈(第8节)以及如何观察和修改数据(第9节)。

30.1 工作空间WinDBG使用工作空间(Workspace)来描述和存储一个调试项目的属性、参数、以及调试器设置等信息。

其功能类似于集成开发环境的项目文件。

分类30.1.1分类WinDBG定义了两种工作空间,一种称为缺省的工作空间(Default Workspace),另一种称为命名的工作空间(Named Workspace)。

当没有明确使用某个命名的工作空间时,WinDBG总是使用缺省的工作空间,因此缺省的工作空间也叫隐含的(implicit)工作空间,命名的工作空间也叫显式的(explicit)工作空间。

windbg的常用命令--强大常用

windbg的常用命令--强大常用

如何手工抓‎取dump‎文件在生‎产环境下进‎行故障诊断‎时,为了不‎终止正在运‎行的服务或‎应用程序,‎有两种方式‎可以对正在‎运行的服务‎或应用程序‎的进程进行‎分析和调试‎。

首先‎一种比较直‎观简洁的方‎式就是用W‎i nDbg‎等调试器直‎接atta‎c h到需要‎调试的进程‎,调试完毕‎之后再de‎t ach即‎可。

但是这‎种方式有个‎缺点就是执‎行debu‎g ger命‎令时必须先‎b reak‎这个进程,‎执行完de‎b ug命令‎之后又得赶‎紧F5让他‎继续运行,‎因为被你b‎r eak住‎的时候意味‎着整个进程‎也已经被你‎挂起。

另外‎也经常会由‎于Firs‎tCha‎n ce E‎x cetp‎i on而自‎动brea‎k,你得时‎刻留意避免‎长时间br‎e ak整个‎进程。

所以‎这样的调试‎方式对时间‎是个很大的‎考验,往往‎没有充裕的‎时间来做仔‎细分析。

‎另一种方‎式则是在出‎现问题的时‎候,比如C‎P U持续长‎时间100‎%,内存突‎然暴涨等非‎正常情况下‎,通过对服‎务进程sn‎a psho‎t抓取一个‎d ump文‎件,完成d‎u mp之后‎先deat‎c h,让进‎程继续运行‎。

然后用w‎i ndbg‎等工具来分‎析这个抓取‎到的dum‎p文件。

‎那么如何‎在不终止进‎程的情况下‎抓取dum‎p文件呢?‎D ebug‎g ing ‎T ools‎for ‎W indo‎w s 里提供‎了一个非常‎好的工具,‎a dplu‎s.vbs‎。

从名字可‎以看出,实‎际上是一个‎v b脚本,‎只是对cd‎b调试器作‎的一个包装‎脚本。

‎其路径与D‎e bugg‎i ng T‎o ols ‎f or W‎i ndow‎s的安装路‎径相同,使‎用的方法也‎很简单,如‎下所示:‎adpl‎u s.vb‎s -ha‎n g -p‎1234‎-o d‎:\dum‎p其中‎-hang‎指明使用h‎a ng模式‎,亦即在进‎程运行过程‎中附加上去‎s naps‎h ot抓取‎一个dum‎p文件,完‎成之后de‎t ach。

WinDBG命令行大全

WinDBG命令行大全

WinDbg 命令(主题分组)原作:Robert Kuster 写于2007年11月。

版权归属于原作者。

翻译:不死怨灵1)内置帮助命令9)例外、事件与事故分析17)变量信息常用Windbg 命令(清空屏幕,……)10)加载模块与映像信息18)内存调试会话(附加,分离……)11)进程相关信息19)操作内存范围表达式与命令12)线程相关信息20)内存:堆调试器标记语言(DML )13)断点21)应用程序验证工具主扩展14)步入与步过(F10,F11)22)记录扩展(logexts.dll )符号15)调用栈源16)寄存器返回顶部.formats.formats 表达式显示数字格式=求一个数值表达式或符号的值,并用多种数值格式表达它(16进制、10进制、8进制、2进制、时间……)例1:.formats 5例2:.formats poi(nLocal1)==.formats @@($!nLocal1).cls 清空屏幕.lastevent显示最近一次发生的例外或事件(为什么调试器要等待?).effmach.effmach .effmach ..effmach #.effmach x86|amd64|ia64|ebc转储有效机器(x86,amd64,...):使用目标电脑本身的处理器模式使用执行最近事件代码的处理器模式使用x86,amd64,ia64或ebc 处理器模式该设置影响许多调试器的功能:->这些处理器的辗转开解器用于栈跟踪->这些处理器的寄存器是激活的.time显示时间(系统启动、进程启动、内核时间、用户时间)dy[b|d]...w=字(2字节)W=字(2字节)+ASCIId=双字(4字节)c=双字(4字节)+ASCIIq=四字(8字节)f=浮点(单精度——4字节)D=浮点(双精度——8字节)b=二进制+字节d=二进制+双字e*e[b|w|d|q|f|D]地址值e[a|u|za|zu]地址"字符串"编辑内存b=字节w=字(2字节)d=双字(4字节)q=四字(8字节)f=浮点(单精度——4字节)D=浮点(双精度——8字节)a=ASCII字符串za=ASCII字符串(NULL结尾)u=Unicode字符串zu=Unicode字符串(NULL结尾)ds,dS ds[/c#][地址]dS[/c#][地址]转储字符串结构(结构!不是无间隔的字符序列)s=字符串或ASCII字符串S=Unicode字符串d*s dds[/c#][地址]dqs[/c#][地址]显示字和符号(地址处的内存被认定为符号表中的一系列地址)dds=双字(4字节)dqs=四字(8字节)dd*,dq*,dp*dd*dq*dp*d*ad*ud*p显示引用内存=显示指定地址处的指针,解引用它并显示多种格式结果位中的内存第二个字符决定使用的指针大小dd*->使用32位指针dq*->使用64位指针dp*->标准大小:32位或64为,取决于CPU的结构第三个字符决定如何显示解引用内存d*a->以ASCII字符形式显示解引用内存d*u->以Unicode字符形式显示解引用内存d*p->双字或四字显示解引用内存,取决于CPU结构如果值与已知符号匹配,则同时显示对应符号dl dl[b]地址最大计数大小显示链接单(LIST_ENTRY或SINGLE_LIST_ENTRY)b=倒叙转储(按照BLinks而非FLinks)地址=列表的起始地址最大计数=转储最多#元素大小=每个元素的大小使用!list为列表中的每个元素执行命令版权所有©Robert Kuster 。

windbg命令

windbg命令
先运行windbg,然后设定符号文件的路径,符号文件就是记录了系统API或库函数的地址与函数名的对应关系的文件,以pdb为扩展名。Windbg一个强大之处是他可以使用远程服务器上的符号文件,例如windows的系统符号就找,这种格式是在设置符号文件路径时需要的。
源文件控制:
ls——列出源代码,系列:lsa, l+, l-, lsc, lse, lsf, lsf-, lsq
符号表控制:
ld——load符号文件,系列:ln, lm,
流控制:
.if .do .for等等
源文件符号文件的设置:
在windbg中可以通过环境变量_NT_SOURCE_PATH,或者通过命令行参数,以及GUI界面来指定。符号文件也一样,源文件和符号文件都可以用服务器来存储。(是不是只要指定了一个目录,其子目录中的文件都能被包含了?符号文件、debug版本exe文件是如何找到源代码的?)
dt——打印复杂类型变量的内容,例如结构体;可以用变量名来指定,也可以用地址范围。
dv——打印局部变量(和dt有什么不同吗?)
栈操作:
k——打印当前线程中的栈信息。系列:kb, kd, kp, kP, kv
.frame——栈帧导航,可以在不同的栈帧之间切换,不过需要注意的是,它给出的信息不一定正确,因为当前线程的栈帧可能已经被破坏了。系列:.f+, .f-
dda——打印指针指向的内容,即先解引用,然后和d一样,/c指定宽度。系列:ddp, ddu, dpa, dpp, dpu, dqa, dqp, dqu
dds——打印当前内存处的内容,如果能在符号文件里找到的话,就打印该符号;有点像反汇编。系列dps,dqs
dg——打印某个选择子(selector)的描述内容,例如内存的全局描述符表KGDT_R0_DATA,(难道是打印这个描述符表中的所有内容?)

Windbg调试命令详解(4)

Windbg调试命令详解(4)

Windbg调试命令详解(4)5. 内存命令这一节里面,我们学习如何查看内存信息。

内存是存储数据、代码的地方,通过内存查看命令可以分析很多问题。

相关命令可以分为:内存查看命令和内存统计命令。

内存统计命令用来分析内存的使用状况。

5.1 查看内存有非常丰富的内存查看命令,它们被统一为d*格式,如下所示:▪d[类型] [地址范围]d代表Display,类型包括:字符、字符串、双字等。

具体来说,d*命令共有这几种:d、da、db、dc、dd、dD、df、dp、dq、du、dw、dW、dyb、dyd、ds、dS。

解释如下:内存类型基本类型:▪dw = 双字节WORD格式;▪dd = 4字节DWORD格式;▪dq = 8字节格式;▪df = 4字节单精度浮点数格式;▪dD =8字节双精度浮点数格式;▪dp = 指针大小格式,32位系统下4字节,64位系统下为8字节。

基本字符串:▪da = ASCII字符串格式;▪du = UNICODE字符串格式;▪db =字节 + ASCII字符串;▪dW = 双字节WORD + ASCII字符串;▪dc = 4字节DWORD + ASCII字符串。

高级字符串:▪ds = ANSI_STRING类型字符串格式;▪dS = UNICODE_STRING类型字符串格式。

二进制 + 基本类型:▪byb = 二进制 + 字节;▪byd = 二进制 + DWORD值如果读者对此感觉不明白,特别是组合模式究竟是何种情形?看下例应能清楚。

下例将同一个ASCII字符串,分别以ASCII字符串、Unicode字符串以及组合模式等共五种方式显示:此系列命令还有一些可加利用的开关选项,介绍如下:/c 列数:指定列数。

默认情况下,列数等于16除以列长,如dd 命令的默认列数即为4列(=16/4)。

例:▪dd /c 8此命令每列显示8个DWORD数,即32字节内容。

/p:此选项用来显示物理内存信息,只能用于内核模式中。

windbg常用命令

windbg常用命令

windbg常用命令
Windbg是微软开发的一款全功能调试器,它为开发人员提供了许多有用的调试功能。

Windbg可以针对 Windows台的应用程序和驱动程序进行高级调试,并且可以支持多种调试模式,具有非常强大的调试功能。

Windbg拥有众多的命令,其中一些命令特别的常用,在日常调试中经常用到。

下面我们就来介绍一些Windbg中特别常用的命令。

首先,为了能够便捷地使用Windbg,我们可以使用命令“.快捷键”,使用这个命令可以查看所有可以使用的快捷键,能明显提高Windbg的调试效率。

其次,Windbg拥有一些非常有用的查看命令,如“dt”(使用这个命令可以查看一个结构体的字段),“.foreach”使用此命令可以遍历一个范围内的所有地址),“dV”查看当前进程的环境变量)。

使用这些命令可以查看内存地址中的数据,从而更好地分析调试程序。

另外,Windbg还支持设置断点,可以使用“bp”命令设置断点。

它允许开发人员在一个程序的任意位置设置断点,用来暂停或者终止程序的执行。

同时,还有一些断点命令,如“ba”(数据断点),“bu”(更改标志断点),“bm”(内存断点)等,可以让你更好地控制调试过程。

此外,Windbg还支持“.ecxr”命令,使用这个命令可以重建程序的栈帧,从而比较清楚地查看程序的执行情况。

最后,Windbg也支持“!analyze”(分析命令),使用这个命令
可以进行系统崩溃或者崩溃栈的分析,从而快速定位程序崩溃的位置,方便开发人员对程序进行修复。

总之,Windbg拥有众多有用的调试功能和命令,以上介绍的这
些命令在调试中是非常常用的,希望上述介绍可以帮助大家更好地利用Windbg。

windbg 运算符

windbg 运算符

WinDbg运算符,是Windows操作系统上的一个调试器工具,常用于分析和诊断应用程序的错误和问题。

WinDbg提供了丰富的命令和运算符,用于在调试会话中执行各种操作。

以下是一些常见的WinDbg 运算符的解释:1. `+` 和 `-` 运算符:在WinDbg中,可以使用加号和减号运算符来进行指针的偏移计算。

例如,`eax+4`表示将`eax`寄存器的值加上4,得到一个新的内存地址。

2. `*` 运算符:用于从内存地址中读取数据。

例如,`*eax`表示从`eax`寄存器指向的内存地址读取数据。

3. `&` 运算符:用于获取变量的地址。

例如,`&myVar`表示获取`myVar`变量的内存地址。

4. `->` 运算符:用于从指向结构体的指针中访问成员。

例如,`myStructPtr->member`表示从指针`myStructPtr`指向的结构体中访问成员`member`。

5. `<<` 和 `>>` 运算符:位移运算符,用于对二进制数据进行位移操作。

例如,`value << 2`表示将`value`左移2位。

6. `=` 运算符:在WinDbg中,可以使用等号运算符来设置变量的值。

例如,`eax = 0`将`eax`寄存器的值设置为0。

7. `!` 运算符:用于执行调试器命令。

例如,`!analyze -v`表示执行一个分析命令,并提供更详细的信息。

这些运算符在WinDbg中用于执行不同的操作,帮助调试人员分析内存、寄存器和程序状态。

在使用这些运算符时,需要理解它们的功能和语法,以便在调试过程中更准确地分析问题。

Windows调试工具入门3(WinDbg基本调试操作)

Windows调试工具入门3(WinDbg基本调试操作)

Windows调试⼯具⼊门3(WinDbg基本调试操作)Windows调试⼯具⼊门3—基本调试操作Windows调试⼯具⼊门-3基本调试操作基本调试操作⼀、调试器命令窗⼝1、简介使⽤Windows调试⼯具进⾏调试,⼤部分和调试器之间的交互都是通过调试器命令窗⼝来进⾏的。

命令的输⼊、输出都是在调试器命令窗⼝中显⽰出来。

对WinDbg来说,调试器命令窗⼝是名为”Command”的窗⼝;对于KD、CDB和NTSD来说,整个命令⾏窗⼝就是调试器命令窗⼝。

这⾥主要介绍WinDbg中的调试器命令窗⼝。

⼀般来说WinDbg运⾏之后都会打开⼀个标题为Command的⼦窗⼝,在没有调试⽬标的时候,这个窗⼝是不能接受输⼊输出的,这时WinDbg处于静⽌模式,只有在打开调试⽬标之后,才能够使⽤它和调试器交互。

窗⼝分为三个部分:位于上部的⾯积最⼤的是命令输出窗⼝。

所有的命令输出、⽬标程序的调试信息输出等等都会在⾥⾯显⽰出来。

上⼀篇中介绍的调试器⽇志中记录的就是显⽰在这⾥的内容。

下半部分左边是提⽰符窗⼝。

这⾥通过提⽰符能够快速知道调试器⽬前的状态。

上图中0:000>,冒号前的数字表⽰当前的进程号,同时调试多个进程时,每个进程都会被指派⼀个进程号;冒号后的000表⽰线程号。

进⾏内核调试时,如果是单处理器系统,提⽰符是kd>的形式;如果是多处理器系统,则是0: kd>的形式,前⾯的0表⽰处理器号。

提⽰符还可能是*BUSY*这样的字符串,以表⽰调试器正忙。

也可以通过命令来⾃定义提⽰符。

下半部分右边是命令输⼊窗⼝。

需要执⾏的命令就在这⾥输⼊。

调试器命令窗⼝中输⼊命令时可以使⽤⼀些快捷操作:上下⽅向键可以查找先前的命令。

ESC键⽤于清除当前⾏的命令。

TAB键⽤于⾃动补完命令。

例如⼀些符号可以只输⼊⼀部分,然后通过按下TAB⼀次或多次来找到需要的符号。

⿏标右键点击命令窗⼝,可以将剪贴板中的内容粘贴到命令输⼊框中。

直接按下ENTER键重复上⼀条命令。

windbg 的常用命令--强大!常用!

windbg 的常用命令--强大!常用!
!name2ee TestClass.exe TestClass.Program.test //显示test方法相关的地址
!dumpmt -md 00976d48 //得到类的成员函数详细信息
!dumpil 00973028 // 显示这个方法被编译器编译之后的IL代码
1、使用VS2005 + sos.dll
2、使用Windbg + sos.dll
第二种方式功能更加强大,下面我就通过实际操作展示一下怎么使用这种方法得到运行时ArrayList内部的值。
有人可能会说:我直接用Visual Studio的单步调试岂不是更快?当然,这个只是一个演示,通过这个演示是为以后的高级调试打下基础
=======================
在.NET下开发时,最基本的调试方法就是使用Visual Studio的单步调试。但是对于一些特殊情况,特别是涉及到CLR内部的时候使用这种方式就达不到目的了。
如果要查看运行时内存使用情况,IL代码,CLR信息等可以使用以下两种方式:
MethodTable: 790fcb30
EEClass: 790fca90
Size: 26(0x1a) bytes
(C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
在操作之前,先熟悉一下基本知识:
A、使用VS2005 + sos.dll调试
1、需要在项目->属性->调试-〉启用非托管代码调试
2、打开调试-〉窗口-〉即时
3、在即时窗口中输入 !load sos 加载调试模块

windb 调试原理(一)

windb 调试原理(一)

windb 调试原理(一)windbg 调试什么是 windbgWindbg是一款强大的Windows调试工具,原本是微软内部使用的调试工具,后来逐渐开放给外部开发人员使用。

它能够对Windows操作系统及各种应用程序进行调试,是开发人员进行低级别调试的首选工具。

windbg 的工作原理1.首先,windbg通过运行attach或者以调试进程的方式加载到目标程序中。

2.然后,windbg通过与目标程序进行交互,获取和修改目标程序的内存状态、寄存器状态和调用堆栈等信息。

3.接着,windbg根据调试者的指示,执行调试命令,如设置断点、步进执行等。

4.最后,windbg将执行结果返回给调试者,并展示在调试界面上。

windbg 的常用命令以下是windbg的一些常用命令:1.g:继续运行,当程序遇到断点时,使用该命令可以继续程序的执行。

2.bp:设置断点,可以根据地址、函数名、源文件名和行号等设置断点。

3.bl:列出所有断点。

4.p:查看变量的值。

5.r:查看和修改寄存器的值。

6.kb:查看调用堆栈。

windbg 的高级用法除了基本的调试功能,windbg还提供了一些高级用法,以帮助开发人员更深入地分析和解决问题。

1.内存和对象分析:windbg可以通过!address命令查看内存的使用情况,通过!heap命令查看堆内存的使用情况,还可以使用!dumpheap命令分析对象的内存布局。

2.异常和崩溃分析:windbg可以从Dump文件中加载崩溃信息,使用!analyze -v命令分析崩溃的原因,可以帮助开发人员找到崩溃的根源。

3.调试扩展:windbg支持调试扩展,使用扩展可以扩展windbg的功能。

以Python为例子,可以使用Python脚本编写调试扩展,从而实现更复杂的调试功能。

总结windbg是一款功能强大的调试工具,可以帮助开发人员更方便地找到和解决问题。

它具有丰富的调试命令和高级用法,可以满足开发人员的各种需求。

Windbg使用简明指南

Windbg使用简明指南

Windbg 使用简明指南2014/2/26 19:55:45第一章1.1. 环境配置准备_NT_DEBUGGER_EXTENSION_PATH=C:\WINDOWS\\Frame work\v2.0.50727 _NT_SYMBOL_PATH=SRV*c:\Symbols*/download/s ymbolsPath add: C:\WINDOWS\\Framework\v2.0.50727 C:\Program Files\Debugging Tools for Windows (x86)1.2 .Net CLR 知识第二章序号 命令 1. .chain 1. 解释常用命令显示有哪些调试扩展。

.load DLLName 加载调试扩展。

DLLName 要是全路径名,包括”.dll” !DLLName.load 1. .loadby DLLNam 加载调试扩展。

DLLName 是短文件名,不包括”.dll”。

e ModuleName ModuleName 是调试进程中的模块名,表示通过它所在的 路径查找 DLLName。

1. .unload DLLNam 卸载调试扩展。

e !DLLName.unloa d 1. .setdll DLLNam 设置缺省的调试扩展。

e !DLLName.setdl l 1. ![ext.]address 显示 VM 的分配状况 1. ![sos.]vmmap 1. ![uext.]vadump 输出虚拟地址映射信息 1. ![uext.]vprot 显示给出的虚拟地址所在内存的映射信息。

address 1. .logfle 1. .logopen .logappend 1. .logclose 1. dt 1. ![ntsdexts.]he 察看 Win32 堆的运行状况。

ap 0 0 1. ![ext.]dlls 1. ![sos.]threads 可以列出所有的托管线程,并在栈顶给出异常对象的地 址。

WinDBG调试命令大全

WinDBG调试命令大全

WinDBG调试命令⼤全转载收藏于:#调试命令窗⼝+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#使⽤gflags.exe⼯具(在windbg所在⽬录下),让某个进程启动时,拉取windbg进⾏调试如下截图:当名称为captcomm.exe的进程启动时,拉起windbg调试也可通过脚本命令来实现:// 运⾏captcomm.exe时,启动windbg调试reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /v Debugger /t REG_SZ /d "C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" /f// 解除启动时windbg调试reg delete"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /f// 64位系统上,也可以设置以下注册表节点reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /v Debugger /t REG_SZ /d "C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" /f// 解除启动时windbg调试reg delete"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /f// 测试发现:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options和HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options指向的是同⼀数据,修改其中任何⼀安全软件可能会禁⽌修改注册表的Image File Execution项:-- 对于360安全卫⼠,在“设置”中去掉“开启360⾃我保护”的勾选来关闭-- 对于McAfee,需要禁⽌IPS(Intrusion Prevension Systems)。

Windbg用法详解

Windbg用法详解

Windbg⽤法详解⼯作空间WinDBG的⼯作空间中保存了以下⼏种信息调试会话状态: 包括断点,打开的源⽂件,⽤户定义的别名(alias)等。

调试器设置:包括符号⽂件路径,可执⾏映像⽂件路径,源⽂件路径,⽤I+/I-命令设置的源⽂件选项,⽇志⽂件设置,通过启动内核调试对话框设置内核调试连接设置,最近⼀次打开⽂件对话框所使⽤的路径和输出设置。

WinDBG图形界⾯信息:包括WinDBG窗⼝的标题,是否⾃动打开反汇编窗⼝,默认字体,WinDBGM窗⼝在桌⾯的位置,打开的WinDBGM⼦窗⼝,每个打开窗⼝的详细信息等。

WinDBGM默认使⽤注册表来保存⼯作空间设置,其路径为:HKEY_CURRENT_USER\Software\Microsoft\WinDBG\Workspaces命令概览WinDBG包括3类命令:标准命令、元命令、扩展命令。

标准命令提供适⽤于所有调试⽬标的基本调试功能,都是WinDBGM调试器内部实现的,不需要加载任何扩展模块。

标准命令第⼀个字符不分⼤⼩写,第⼆个字符可能区分。

元命令是内建在调试器引擎或者WinDBG程序⽂件中的。

所有元命令都以⼀个点.开始,所以也被称为点命令。

扩展命令是是现在动态加载的扩展模块中的。

扩展命令,以叹号!开始,叹号在英⽂中读作bang,因此扩展命令也被称为Bang Command扩展命令的完整格式是![扩展模块名].<扩展命令名> [参数]扩展模块名可以省略。

输⼊和执⾏命令要点可以在同⼀⾏输⼊多条命令,⽤分号;作为分隔符直接按回车键可以重复上⼀条命令。

可以使⽤Ctrl+Break来终⽌⼀个长时间未完成的命令。

如果使⽤KD或者CDB,那么⽤Ctrl+C.按Ctrl+Alt+V热键可以启⽤WinDBGM的详细输出模式,再按⼀次恢复到本来的模式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

bp KERNELBASE!CreateFileW+0x5"dU /c 50 poi(@ebp + r eax;if(@eax<0){.echo hit}.else{gc}" 软件断点
bp KERNELBASE!CreateFileW+0x5"dU /c 50 poi(@ebp+ bp `d4dtest!d4dtestdlg.cpp:196` ba w4 0006fc74 bm /a nt!Dbgk*
bl g gu $$ 返回到父函数 p p "dv" $$单步后自动执行dv命令 pc $$单步到下一条call指令 t tc $$跟踪到下一条call指令 tb $$跟踪到下一条分支指令 wt - 13 u nt!PsGetCurrentProcessId uf RtlLeaveCriticalSection ub 773c78e9 a<地址> !locks !cs -1 !alpc /m 9322a230 dt _RTL_CRITICAL_SECTION dt _ERESOURCE dt _KEVENT -r !pcr dg @fs !idt -a !cpuid !cpuinfo !irpl dt -KPCR !drvobj ser2pl !devobj 85163500 !devstack 85163500 !devnode 0 1 !irp 85163e70 dt _IO_STACK_LOCATION 85879d60 dt _IRP dt _DRIVER_OBJECT dt _DEVICE_OBJECT !arbiter 2 $$物理地址的分配情况 !pci ff 0 2 0 0 ff !pcitree ib 510 ob 510 0a !amli dns /s \_sb_.pci0.bat0 !loadby sos mscorwks .load clr10\sos.dll !name2ee clihello CliHello.CliHello.Main !ip2md 0x7ff 001c0dbd
管理
恢复
单步
单步
反汇编
自动 反 反汇编 反向 汇
扫描关键区(用户态)
观察 观察A
观察数
处理器
管理处理 观察段 观察I 显示CP 显示CPU属 显示保存 观察数据 显示和观察 观察设备 观察设 观察设备 观察I
驱动程序
观察数
托管程序
显示资 观察P 显示P 读I/O 写I/O AMLI调 加载扩展 加载扩展 显示名字对 显示程序地址
显示内存数据
按类型显示 编辑内存数据 读物理地址 写物理地址 虚拟地址转换到物理地址 显示页表项 显示物理内存使用情况 显示内核池信息 观察进程的地址空间 观察窗口句柄 显示堆信息 观察数据结构 观察或者启用堆的调试支持 函数调用序列 切换当前栈帧 显示数据和符号 显示局部变量
读写寄存器
读MSR寄存器 切换到异常上下文 切换到指定TSS 切换到陷阱帧 切换32/64位上下文
硬件断点 成批设置断点
管理断点 恢复执行 单步执行
单步跟踪 自动跟踪 反汇编 反汇编整个函数 反向反汇编 汇编 扫描关键区(用户态)或ERESOURCE(内核态) 观察关键区 观察ALPC端口 观察数据结构 管理处理器控制区 观察段描述符 观察IDT表 显示CPU型号 显示CPU属性(内核态) 显示保存的IRQL 观察数据结构 显示和观察驱动对象 观察设备对象 观察设备栈 观察设备节点 观察IRP 观察数据结构 显示资源分配情况 观察PCI空间 显示PCI设备 读I/O端口 写I/O端口 AMLI调试器 加载扩展命令模块 加载扩展命令模块 显示名字对应的对象信息 显示程序地址对应的方法描述
观察线程的托管 托管栈回溯 显示托管对象 设置断点
分类
命令 ? .help .hh
显示


帮助
!help .chain !error version ? ??





表达式
; $$ poi .expr n .formats .create .attach .restart
显示或
以多 创建 附
让调试目
调试会话
.reboot .crash .detach q .symfix .reload ld .sympath !sym

显示


~
针对一 !teb 线程 .thread !thread
显示

dt ! !address s

运行在64 观 观察 搜索
d
显示
内存
d
显示
内存
dt e !dd !ed !vtop !pte !memusage !pool !vad !sdbgext.hwnd !heap dt !gflag k
重启 强制目

模块和符号
.symopt x ln lm
列模
转储文件
!lmi !dlls !imgreloc !dh .dump !analyze .writemem .bugcheck adplus (脚本) |
模块


将内 显 监视
显示
!process 进程 !dml_proc .process .kill !peb dt .tlist
模块和PDB文件详情 动态库信息 模块的重定位信息 观察PE文件头 产生转储文件 自动分析 将内存数据写到文件 显示蓝屏错误码 监视进程和自动转储 显示或切换进程(用户态)
显示进程(内核态) 观察进程信息 显示或切换进程(内核态) 杀进程 观察进程环境块 观察数据结构 列进程 显示线程 切换线程
针对一个或多个线程执行命令 显示线程环境块 显示或切换线程(内核态) 观察线程(内核态)
按类
编辑

ห้องสมุดไป่ตู้
读物 写物 虚拟地址 显示 显示物理 显示内核 观察进程 观察窗口 显示堆信 观察数据
观察或者启
函数调

.frame dds dv
切换当 显示数据 显示局
寄存器
r
读写寄
上下文
rdmsr .ecxr .tss .trap .effmach
读MSR 切换到异 切换到 切换到
切换32/
bp 断点 ba bm
观察数据结构 运行在64位系统的32位线程信息 观察内存空间 观察内存块属性 搜索内存数据
显示内存数据
!lmi nt !dlls -a !imgreloc !dh 76930000 -a .dump /mfh c:\dumps\pdf\acroba ! analyze -v .writemem c:\dumps\blog.txt 07288600 .bugcheck Adplus -pn powerpnt.exe -pn wincmd32.exe -hang -o |* |2s !process 0 0 !process 0 0 powerpnt.e !process 8 1 !process 88bfbb80 !dml_proc $$ 以DML方式显示进程 .PROCESS /i 9382a53 .kill 8adc85f0 $$参数为EPROCES !peb dt nt!_EPPROCESS dt ntdll!_PEB @$peb .tlsit $$列的是调试器所在的系统的 ~ ~* ~0s $$ 0 是线程序号 ~~[14d8]s $$ 14d8为线程的 ~* kvl ~*e ? @$tid;!gl ~1k !teb .thread 80551d20 .thread /p 87474da !thread !thread 9383a03 dt nt!_ETHREAD dt _TEB -y Last dt _CONTEXT dt _CONTEXT 0007f ! !address !address 0728988 s -u 10000 L8000000 "当年在 db e1c52ce0 da 000000000a4a9640 dd @ebx 1l dd bc74ed08 1l dd 805490c4 + 8 1l
托管程序
!threads !crlstack !do !bpmd
观察线程 托管栈 显示托 设置
注册表
!reg
操作
sxe 调试事件 gn gh .lastevent .server
配置调
远程调试
调试器不 调试处 显示上一次 将调试器升
安于此生整
描述 显示所有标准命令 显示所有元命令 打开帮助文件 显示扩展命令 显示加载的插件 显示错误码含义 显示版本信息 评估宏汇编表达式 评估C++表达式 命令分隔符 注释符号 取地址内容 显示或改变表达式类型 设置数制 以多种格式显示数 创建新的进程并调试 附加到指定进程 让调试目标重新运行(用户态) 重启目标系统(内核态) 强制目标系统崩溃(内核态) 分离调试目标 终止调试 设置符号服务器 刷新模块和符号 加载符号文件 显示或设置符号路径 设置符号选项 设置符号选项 显示符号 搜索符号 列模块或显示模块详情
软件
硬件 成批设
断点
bd/be/bc/bl g p 执行和跟踪 t wt u uf ub a !locks 死锁 !cs !alpc dt !pcr dg !idt !cpuid !cpuinfo !irql dt !drvobj !devobj !devstack !devnode !irp dt !arbiter !pci !pcitree ib/iw/id ob/ow/od !amli .loadby .load !name2ee !ip2md
示例($$后为注释)
? .help .help /D $$显示带有DML导航链接的 .help /D r* .hh .reload !ext.help !help dumpheap .chain /D !error c0000034 !error 6 !error 80004005h version ? a27-65e ?? (unsigned int)-1-73741 ??&(this->m_Button r;kv;gc
相关文档
最新文档