首页 > 其他分享 >windbg 常用调试命令总结

windbg 常用调试命令总结

时间:2024-08-13 20:39:55浏览次数:13  
标签:总结 显示 windbg 写入 命令 地址 断点 调试 字节

windbg 是 Microsoft 公司免费调试器调试集合中的 GUI 的调试器,支持 Source 和 Assembly 两种模式的调试。Windbg 不仅可以调试应用程序,还可以进行 Kernel Debug。结合 Microsoft 的 Symbol Server,可以获取系统符号文件,便于应用程序和内核的调试。Windbg 支持的平台包括 X86、IA64、AMD64。

那么在我们使用 windbg 的时候,虽然命令纷繁复杂,但是有一些常用的命令是我们需要掌握的,熟练的运用这些命令能给我们调试带来事半功倍的效果,因此我对常用命令进行了一个总结,方便查找。

至于其他更为复杂命令使用,我们可以通过查看官方提供的 windbg 命令手册:
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debuggercmds/commands

1.流程控制相关命令

g       // Go 让程序跑起来
p       // 单步步进(F10)
p 2     // 单步步进2次
pa 0x7c801b0b   // 单步布进执行到 7c801b0b 地址处停下
pc      // 单步步进执行到下一个函数调用处停下

q       // 结束调试会话

2.内存读写相关命令

db      // 按字节显示(1字节)
dw      // 按单字显示(2字节)
dd      // 按双字显示(4字节)
dq      // 按四字显示(8字节)
da      // 按 ASCll 字符显示(1字节)
du      // 按 UNICODE 字节显示(2字节)
df      // 按单精度浮点数显示(4字节)
dD      // 按双精度浮点数显示(8字节)

eb      // 按字节写入(1字节)
ew      // 按单字写入(2字节)
ed      // 按双字写入(4字节)
eq      // 按四字写入(8字节)
ea      // 按 ASCll 字符写入(1字节,不会自动在结尾填充 '\0' 字符)
eu      // 按 UNICODE 字符写入(2字节,不会自动在结尾填充 '\0' 字符)
ef      // 按单精度浮点数写入(4字节)
eD      // 按双精度浮点数写入(8字节)
eza     // 按 ASCll 字符写入(1字节,会自动在结尾填充 '\0' 字符)
ezu     // 按 UNICODE 字符写入(2字节,会自动在结尾填充 '\0' 字符)

!db     // 将物理地址按字节显示(1字节),其他内存操作命令同理

dt _eprocess        // 查看 EPROCESS 结构体成员
dt _eprocess 0x510  // 从地址 0x510 处按照结构体 EPROCESS 对数据进行解析
dt ntdll!*          // 显示ntdll里的所有类型信息
dt ntdll!_peb*      // *是通配符;显示 ntdll 模块中所有peb打头的结构体名称;

r               // 显示所有寄存器信息及发生 core 所在的指令
r eax, gdtr     // 显示eax,gdtr寄存器信息
r eax=5, edx=6  // 对寄存器eax赋值为5,edx赋值为6

3.内存搜索相关命令

可以指定的查找模式有:
-b    // 字节(8位)
-w    // WORD(16位)
-d    // DWORD(32位)
-q    // QWORD(64位)

s -b fffff801`87b58a70 L100 cc c2    // 从地址处往后100个字节里查找字节序列为 cc c2 的地址
s -b fffff801`87b58a70 L-100 cc c2   // 从地址处往前查找
s -b fffff801`87b58a70 L100 'k' 'k'  // 查找字节序列的 ascall 码为 k k 的地址

s -d fffff801`87b58a70 L100 'H'      // 按照双字查找 ascall 码为 H 的地址,结果如下:
(fffff801`87b58a70 00000048 00000000 500c0163 00000000 H.......c..P....)

s -a fffff801`87b58a70 L100 "ntdll"  // 查找 ascall 字符串为 "ntdll" 的地址,结果如下:
(fffff801`87b58a70 6e 74 64 6c 6c 5c 6c 64-72 69 6e 69 74 2e 63 00 ntdll\ldrinit.c.)

4.断点相关命令

bp main        // 在main函数开头设置一个断点
bp 0x7c801b00  // 在7c801b00地址处放置一个断点
bu 0x7c801b00  // 未解析的断点
ba i4 3f8      //处理器断点(硬件断点,访问该地址数据时断下,该命令在所有串行端口上添加一个断点,其中包含从 0x3F8 到 0x3FB 的地址)
bl            // 列出所有断点
bc *          // 清除所有断点
be *          // 启用所有断点
bd *          // 禁用所有断点
bc 1 2 5      // 清除1号、2号、5号断点,其他命令同理

5.反汇编相关命令

u                      // 反汇编当前 eip 寄存器地址的后8条指令
u main.exe+0x10 L20    // 反汇编 main.exe+0x10 地址后20条指令
ub 000c135d L20        // 查看地址为000c135d指令前的20条指令内容
uf NtOpenProcess       // 反汇编 NtOpenProcess 函数
uf demo::add           // 反汇编demo类的add函数

6.堆栈相关命令

k       // 显示当前调用堆栈
kn      // 带栈编号显示当前调用堆栈
kb      // 打印出前3个函数参数的当前调用堆栈
kb 5    // 只显示最上的5层调用堆栈
kv      // 在kb的基础上增加了函数调用约定、FPO等信息
kp      // 显示每一层函数调用的完整参数,包括参数类型、名字、取值
kd      // 打印堆栈的地址

.frame         // 显示当前栈帧
.frame n       // 显示编号为n的栈帧(n为16进制数)
.frame /r n    // 显示编号n的栈帧(n为16进制数) 并显示寄存器变量
.frame /c n    // 设置编号n的栈帧为当前栈帧(n为16进制数)

7.进程相关命令

!process -1 1                    // 查看当前进程信息
!process 0n<进程PID> 0(e.g. !process 0n4 0)         // 获取 PID 为 4 的进程信息
!process 0 0 <进程名>(e.g. !process 0 0 x64.exe)    // 获取进程名为 x64 的进程信息
.process /p /i <进程eprocess>    // 切换到目标进程的上下文

8.模块相关命令

lm            // 列出所有模块对应的符号信息
ld *          // 为所有模块加载符号
ld kernel32   // 加载 kernel32.dll 的符号

9.符号相关命令

.sympath              // 查看当前符号查找路径
.sympath c:\symbols   // 将符号查找路径设为:c:\symbols
.sympath+ c:\symbols  // 将c:\symbols添加到符号查找路径集合中

.reload               // 为所有已加载模块载入符号信息
.reload /f /v         // f:强制立即模式(不允许延迟载入)  v:详细模式
.reload /f @"c:\windows\System32\verifier.dll"   // 为指定模块加载符号信息

10.其他常用命令

ed kd_default_mask 0xffffffff    // 设置在 windbg 上输出调试信息

标签:总结,显示,windbg,写入,命令,地址,断点,调试,字节
From: https://www.cnblogs.com/lostin9772/p/18357632

相关文章

  • 8,13号考试错题总结
    考试情况ABCDEF100030100160考题A.P1571眼红的MedusaB.P2249【深基13.例1】查找C.P1678烦恼的高考志愿D.P1918保龄球E.P1102A-B数对F.B3799[NICA#1]序列考点/易错点A.P1571眼红的Medusa:考二分模板掌握度B.P2249【深基13.例1】查找:同上......
  • 八月驾照总结(考科三)
    最近一直在考驾照,说一说 八月八日开始练习科三 我们一个教练带着20学院练习,第一天我就摸到了一把车,跑了一圈,基本全忘了,刚起步,我记混了油门和刹车(耻辱)后面忘记了,一档前行不能超过50米,没有及时换二挡,后面还可以  我们一共从下午四点等到了晚上八点,就摸到了一把车,不如......
  • Springboot计算机毕业设计机房管理系统(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表教师,课表信息,课程信息,机房信息,设备信息,设备使用开题报告内容一、研究背景随着信息技术的迅速发展,计算机和网络已经成为现代社会不可或缺的一部分。在教育......
  • 基础类型总结
    类型占用byte1字节short2字节char2字节int4字节long8字节double8字节boolean1/8字节float4字节......
  • PbootCMS网站常见错误提示总结
    一些新手朋友在安装pbootcms经常遇到一些错误,下面罗列出pbootcms在后台或者前台出现的问题和解决方法。1、Parseerror:syntaxerror,unexpected':',expecting'{'inwwwcore unctionhandle.phponline130这个问题是php版本的问题,在最新版的pbootcms中对php环境要求是要......
  • 8 12 考试总结
    812考试总结难度分布不是很合理?果然只是我太菜了T1原题:[ARC164B]SwitchingTravel观察题意:可以发现是找一条黑白相间,两端颜色一致的链拼起来的环。讲真,当时想的是直接爆搜的,但在设计时遇到了一些问题,导致没写出来。正解是并查集判环。若一条边连接的两点颜色不同,则其......
  • 600条Linux 命令总结
    一、基本命令uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件(SMBIOS/DMI)hdparm-i/dev/hda罗列一个磁盘的架构特性hdparm-tT/dev/sda在磁盘上执行测试性读取操作系统信息arch显示机器的处理器架构uname-m显示机......
  • 个人技能总结-redis部分
    Redis部分技能总结架构总结Redis目前在用分为主从模式,sentinel主从模式集群Redis-cluster集群模式3种模式。redis-cluster是多master模式由多个maste共同维护16384个slotredis-sentinel是单master模式主从模式由sentinel控制主从切换和健康检查。种方式的优缺点Sen......
  • 个人技能总结-mongodb部分
    mongodb集群部分技能总结mongodb集群架构MongoDB是一种广泛使用的NoSQL数据库,其集群架构设计灵活且强大,能够根据不同的应用场景和需求提供合适的解决方案。目前,MongoDB主要有三种集群架构模式:主从复制(Master-Slaver)、副本集(ReplicaSet)和分片(Sharding)模式。主从复制(Master-Slav......
  • 个人技能总结-ES集群部分技能总结
    ES集群架构总结规划ES应用场景Elasticsearch(ES)是一款功能强大的分布式搜索引擎,广泛应用于各种场景。以下是其主要应用场景的详细介绍:Elasticsearch被广泛用于构建全文搜索引擎,能够快速而准确地搜索大量的文本数据,并提供高效的分析和聚合功能。例如,维基百科和百度百科使用ES进......