总结下windbg的常用命令

【C++软件实战问题排查经验分享系列 ④】pdb符号文件 | dump文件分类与生成方法 | Windbg分析dump文件 | Windbg动态调试 | Windbg常用命令 总结 在开发调试C++软件的过程中,时常会使用Windbg分析排查软件运行过程中遇到的各种异常问题。本文对使用Windbg涉及到的pdb符号文件、dump文件分类与生成方法、Windbg分析dump文件、Windbg动态调试目标进程、Windbg常用命令等诸多相关内容进行详细的总结,并给出相关的实战分析实例,供大家借鉴或参考。 阅读详情

 

1.启动
1)直接调试: 
gdb program [core]
cdb program or cdb -z DumpFile
2)attach方式
gdb attach pid
cdb -pn ExeName or cdb -p pid

2.显示堆栈
GDB: bt
CDB: k

 

堆栈命令堆栈命令都是K开头

k 使用K命令进行栈回溯

kL 和上面一样,只是省略了源代码段 L 一定要大写

kb L 还是回溯,显示前3个参数(只是机械的按ebp+8,ebp+0xC,ebp+0x10取三字值,不判断),L意思和上面一样。

kp;kP 把参数和参数值都以函数原型的格式显示出来。P大写表示参数占用一行。

kv 在kb的基础上增加显示FPO(栈指针省略)

kn 显示序号。

kn f 可以知道相邻栈帧的距离。(也就是看上父函数使用了多少栈空间,适用于检测栈溢出)

观察栈变量

dv 观察栈上的局部变量   dv /i/t/V 表示格式

.frame <栈帧序号> 切换栈帧

du   观察特定值。 例如 du ebp-4

!for_each_local 枚举当前所有的局部变量

!for_each_frame dv  切换到所有栈帧,并显示局部变量


3. 设置断点
GDB: b [file:]line
CDB: bp 'file:line'

4. 运行/继续运行
GDB: run [arglist] 
c 继续运行 
CDB: g

5. 单步
GDB : n (step over) s (step into)
CDB : p

6. 打印变量的值
GDB : p expr
CDB: ? expr

说老实话,CDB过于复杂,学起来比GDB难.

BTW:用CDB之前设置一下symbol的path
set _NT_SYMBOL_PATH=srv*c:/symbols*http://msdl.microsoft.com/download/symbols

 

 

运用Windbg进行内核调试, 熟练的运用命令行是必不可少的技能. 但是面对众多繁琐的命令, 实在是不可能全部的了解和掌握. 而了解Kernel正是需要这些命令的指引, 不断深入理解其基本的内容. 下面, 将介绍最常用的一些指令, 使初学Kernel调试的朋友们能有一个大致的了解. 至于如何熟练的运用它们, 还需要实际的操作过程中进行反复的琢磨.

Windbg能够方便的进行远程调试和本地进程调试(只限于User模式), 远程调试又分User mode和Kernel mode两种. 个人认为用Windbg进行远程的User mode调试还不如用Visual Studio来的方便, 毕竟要一些相应的配置才行, 而Visual Studio只需要远程机器的IP地址即可.(当然, 如果你在LiveCD或WinPE下进行User mode的调试, 这时候没有VS, Windbg就是不二之选了). Windbg的优势就在于远程的Kernel模式的调试, 这是VS所做不到的.

1. 首先是设置符号路径(无论在User mode下还是Kernel mode下都需要), 在Windbg的符号路径对话框中, 输入以下符号路径:

      srv*c:/symbols*http://msdl.microsoft.com/download/symbols

这个符号路径是自动在微软给定的symbols路径下进行自动搜索, 一些常用的符号都可以利用这个链接自动找到. 当然, 如果你的本地已经有相应的符号路径, 包含本地的也可以.

2. 等Windbg的联机状态设置好后, 按下Ctrl+break, 中断当前的Kernel状态, 在Windbg的命令行窗口输入"?", 则会输出帮助菜单, 在这个Menu中会显示一些常用的命令:

  (1)断点指令

     B[C|D|E] [<bps>]
     clear|disable|enable breakpoints
 
     BL
     list breakpoints
 
     BP <address>
     set soft breakpoints
 
     BA <access> <size> <addr>
     break on access
 
  (2)数据查看指令
     D[type][<range>]
     dump memory
 
     DT [-n|y] [[mod!]name] [[-n|y]fields][address] [-l list] [-a[]|c|i|o|r[#]|v]
     dump using type information
 
     DV [<name>] 
     dump local variables
  分析内存

d系列命令用来显示指定地址的内存区域

d {a | b | c | d | D | f | p | q | u | w | W} [Options] [Range]

dy {b | d} [Options] [Range]

d [Options] [Range]

//大括号内为显示方式 
a ASCII 
b 字节和ASCII码 
c DWORD和ASCII码 
d       表示DWORD

D 双精度浮点数

f   单精度浮点数

p 表示按指针宽度显示

q 4字(8字节)

u UNICODE字符

w 字

W 字和ASCII码

yb 二进制和字节

yd 二进制和双字

Range 指定要显示的内存范围

1. 例如: dd 0012fd9c 0012fda8

    用DWORD表示0012fd9c 到0012fda8之间的内存

2. dd 0012fd9c L4

    用DWORD表示0012fd9c后的4个DWORD

3. dd 0012fda8  L-4

    0012fda8是结束地址,显示在他前面的内存

显示字符串

以0结尾的字符串可以使用

da 适用单字节字符集

du 适用UNICODE字符集

UNICODE_STRING

dt _UNICODE_STRING = dS

ds   显示(STRING)

显示数据类型

dt 按指定数据类型来显示内存中的数据

dt  [模块名!] 类型名

* 类型名可以用通配符

-b 递归显示所有子类型

-r 指定显示深度 -r0 不显示子类型 -r1显示1级子类型

-ny  附加搜索选项,显示某些字段

  (3)数据修改指令
     E[type] <address> [<values>]
     enter memory values
 
  (4)运行
     G[H|N] [=<address> [<address>...]] 
     go
 
     P [=<addr>] [<value>]
     step over
 
  (5)堆栈操作
     K[b|p|P|v]
 
  (6)显示加载的模块列表
     LM
     list modules
 
  (7)寄存器操作
     R [[<reg> [= <expr>]]]
     view or set registers
 
  (8)Search指令
     S[<opts>] <range> <values>
     search memory
 
  (9)跟踪指令T,TA,TB,TC,WT,P,PA,PC
 
  (10)退出
      Q

  (11)反汇编
      U[<range>]

其中最常用的就是反汇编操作和显示模块操作. LM命令显示当前加载的模块. 当你连接过程中, Windbg提示相应的module找不到时, 就可以运用这个命令进行查看. LM的一个扩展命令是"lm t n", 这个命令显示当前所有加载的驱动信息(过去的命令是!driver),在调试内核驱动的过程中非常有用,可以找到相应驱动的起始地址。反汇编命令u, 可以在相应的地址中逐步的解析代码,这在内核调试中是最常用的一种查看代码的方式。

除上面的一些基本命令之外,还有一些非常有用的指令:
  
  (1)K[KB|KP]
     显示当前的堆栈,当然也可以用alt+6直接调出窗口显示
  
  (2)!process
     显示当前的进程EXPROCESS状态,!process 0 0 显示所有的进程状态

  (3)!thread
     显示当前的线程状态,dt nt!_ethread显示ETHREAD结构

  (4)!drvobj [path]
     列出当前的驱动程序在驱动对象中的例程,其中path是驱动的设备路径,例如: !drvobj /filesystem/fat 2 列出FAT文件系统驱动的例程

  (5)dt nt!_*
     查看内核的数据结构
  
  (6)!stack 0
     显示线程当前地址
  
  (7)!ioapic
     查看I/O的中断控制器

  (8)!irql
     查看CPU的IRQL,这在CPU中断调试中非常有用

  (9)!exqueue
     可以看系统辅助的线程列表

  (10)!reg viewlist
     注册表的存储显示,!reg hivelist显示注册表一个存储的内存使用量

  (11)!vm
     显示系统的内存池信息

  (12)dt _TOKEN
     显示内部访问令牌

  (13)!object /device
     显示设备对象信息,用winobj工具也可以看到

以上命令是一些常用的内核调试命令, 还有非常多的命令技巧, 不可能全部一一解释. 在今后的文章, 还会结合具体的调试过程分析进行逐步介绍. 内核的调试无非是处理器, 系统设备, 内存, 进程线程, 注册表, 驱动这几大类的信息, 每一类都有很多的命令, 需要我们在实际的调试过程中不断认识和体会它的用法. 当然, 理解这些命令用法的前提是需要我们对操作系统内部构造有一个清晰的认识. 这需要不断的学习, 对OS有一个全局的把握, 这样才能更深入的理解它. 而通过Windbg的内核调试, 我们有一种更好的方式直接与Kernel打交道, 这对我们深入理解和认识操作系统有很大的帮助. 下一节我们将通过一个实际的调试driver的例子, 来进一步认识Windbg在内核调试中的作用.

 

Amesim管路仿真进阶:如何用阻力管实现不规则管路的高精度模拟 本文深入探讨了在Amesim仿真中,如何利用阻力管(Orifice with Table)元件,特别是TFORT0子模型,实现对不规则管路的高精度模拟。通过直接输入基于测试或CFD的流量-压降数据,该方法能有效弥补标准管路模型在复杂流道、内部结构复杂等场景下的不足,为液压、热管理等系统仿真提供精准可靠的部件模型。 阅读详情

相关推荐

车载导航GPS欺骗

因此,如果我们能够模拟卫星信号,将模拟的信号通过信号发射装置发送给GPS传感器,那么就有可能实现欺骗GPS传感器获取虚假的位置信息,这种技术即SDR(软件无线电,Software Defined Radio)[2]。究其原因,在不使用时钟模块的条件下,HackRF发送信号的频率可能不十分精准,因此GPS传感器接收到信号之后可能无法正常解析GPS信号,因此时钟信号可能是HackRF进行GPS欺骗的关键。2)HackRF是否使用了时钟模块,时钟模块决定了信号发送频率的精准程度,对实验的成败也是至关重要的。

2503_90751789的博客 1324

Windbg内核调试之二: 常用命令

运用Windbg进行内核调试, 熟练的运用命令行是必不可少的技能. 但是面对众多繁琐的命令, 实在是不可能全部的了解和掌握. 而了解Kernel正是需要这些命令的指引, 不断深入理解其基本的内容. 下面, 将介绍最常用的一些指令, 使初学Kernel调试的朋友们能有一个大致的了解. 至于如何熟练的运用它们, 还需要实际的操作过程中进行反复的琢磨.Windbg能够方便的进行远程调试和本地进程调试(只

mergerly的专栏 1432

S32DS3.5图形化配置实战:从零构建S32K144通信接口工程

本文详细介绍了如何使用S32DS3.5图形化配置工具从零构建S32K144通信接口工程。通过实战演示引脚配置、时钟树设置、SPI接口搭建等关键步骤,帮助开发者快速掌握NXP S32K系列开发技巧,提升嵌入式开发效率。特别针对S32DS3.5版本的新特性进行了深度解析,包括智能代码生成和调试优化方法。

weixin_26834815的博客 199

windbg学习笔记(四)

局部变量 有两个命令可以打印当前的局部变量列表:x 和dv。x命令前文已经讲过。dv是Display local Variable的缩写。下面是对一段简单的Win32控制台代码获取其局部变量的情况: AcsVio.exe 0:000:x86> x 0019ff34 argc = 0n1 0019ff38 argv = 0x04901a68 0019ff18 ProcAdd = 0x

波波诸葛伟 565

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 756

【人工智能AI】是什么?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的一门新的技术科学。(百度百科)人工智能的基本原理:机器从「特定的」大量数据中总结规律,形成某些「特定的知识」,然后将这种「知识」应用到现实场景中去解决实际问题。在这个基本原理的基础上,有3个特征:1、人工智能本质上是一种工具2、人工智能技能只能解决特定的问题,而不是什么都能做3、人工智能属于归纳逻辑,可以告诉你是什么,但是不能告诉你为什么。

KJCZ.AK的博客 2万+

WinDbg调试器使用

WinDbg配置和使用基础     WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 1. WinDbg介绍:     Debugging Tools and Symbols: Getting Started http://www.microsoft.com/whdc/devtools

marken 1475

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1585

windbg常见调试命令

一、环境配置 C:\MyLocalSymbols;SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols; http://10.33.40.55/symbols 上面的MyLocalSymbols目录放了系统符号表,网络地址是在本地找不到系统符号表的情况,从网络下载,最后面的是应用程序符号表 第一次使用的时候,会从网络...

momo459548255的博客 727

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 48

【ArcGIS微课1000例】0149:Geographic Imager6.6下载安装教程

首先保证电脑上安装对应版本的PS软件,笔者安装的是PS2023(V24.7)版本,然后安装本软件。保持以上窗口运行状态,然后打开PS,自动弹出如下窗口。勾选【Automatically checkout LIcense】,点击Close。双击setup开始安装,点击【确认】,一路默认安装到底。驱动器:DVD-ROM驱动器(用于DVD版本)处理器:2GHz或更快的英特尔或AMD处理器。安装完成后,将Crack中的所有文件拷贝到。硬盘:600 MB的可用硬盘空间用于安装。内存:4GB内存(建议8GB或更高)。

智慧空间实验室 1217

windbg获取函数指针

windbg获取函数指针

HeroRazor的专栏 811

顶刊论文引言用AI怎么写?借助Gemini 3 Pro结合四段式写出逻辑清晰的Introduction

写研究目标时,先明确研究问题,直接回应前文提到的研究缺口,如 “This study aims to investigate whether X modulates Y via the Z pathway in human cells.”然后再提出你的研究假设,当理论依据清晰时,可以用如 “We hypothesized that inhibiting X would rescue Y deficiency in this model.”的句子点出研究目标。要求:1)明确陈述本研究拟解决的核心科学问题;

智能AI让学术科研更容易 180

Windbg 常用命令

wingdb命令

田振靓的博客 2279

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Windbg】常用命令

Windbg(Windows Debugger)是微软提供的强大的调试工具,用于在 Windows 操作系统上进行应用程序和内核级别的调试。它主要用于诊断和解决软件开发中的问题,包括崩溃、死锁、内存泄漏、性能问题等。

sunriver2000的专栏 769

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

windbg常用命令

windbg常用命令2009-12-18 20:511.基本调试控制运行程序(Run): 快捷键:F5 命令:g单步步入(Step In): 快捷键:F8 命令:p单步步过(Step Over): 快捷键:F10 运行到光标所在行: 快捷键:F7执行到返回:gu执行到指定地址:g [Address]重新运行调试程序: 快捷键:Ctrl+Shift+F5(

827

windbg常用命令详解

登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 *标题 标题不能为空 网址 标签 位置 个人主页 - 我的知识 同时保存至: 选择知识图谱 敏捷MFCC++ 新建?

a3125504x的博客 901

windbg 常用命令详解

一、1、 !address eax查看对应内存页的属性2、 vertarget显示当前进程的大致信息3 !peb显示process Environment Block4、 lmvm可以查看任意一个dll的详细信息例如:我们查看cyusb.sys的信息5.reload !sym 加载符号文件6、 lmf列出当前进程中加载的所有dll文件和对应的路径7、 r命令显示和修改寄存器上的值r命令显示和修改寄...

guangmingsky的专栏 1842

windbg常用命令总结

windbg常用命令总结 https://bbs.pediy.com/thread-258092.htm

darcy_123的博客 222

Windbg常用命令备忘

Windbg常用命令备忘 windbg是一款微软推出的专业实用的源码调试工具软件。 1、符号表下载方法:使用命令下载对应的符号表symchk /r c:\windows\system32\k* /s SRV*c:\symbols\*https://msdl.microsoft.com/download/symbols,然后就能在c:\symbols目录下得到对应dll的符号表; 2、windbg调试windows内核的设置: (1)vmware设置,删除打印机,添加串口,命名为\.\pipe\comdbg

m0_46256056的博客 2230

WinDbg 常用命令

_NT_SYMBOL_PATH     SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols _NT_ALT_SYMBOL_PATH  D:\xuleigang\Test\VSS\TestMemMfc\debug SRV*c:\websymbols*http://msdl.microsoft.com/download/symb

xulg1984的专栏 925

【转帖】windbg常用命令集

 windbg常用命令集!strct eprocessdt -v -r ntdll!_peb (windows2003下改为:dt -v -r nt!_peb)dt _eprocessdt -v -r _eprocess (加上-v -r显示详细结构)dt nt!_driver_object列出可以调试的驱动程序lm t n   (以前是!drivers)加入源

floweronwarmbed的专栏 2937
上一篇: 【转帖】一个函数通解WINDOWS原理.
下一篇: 利用VA实现VS编写WDK代码高亮和自动提示功能
开发随笔
博客等级 码龄19年 6粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值