当前位置: 首页 > news >正文

Windbg 命令 (四)

断言处理 ah

ahb [Address]    // 指定地址的断言如果失败则中断调试器
ahi [Address]    // 忽略指定地址断言的失败
ahd [Address]    // 删除指定地址的断言信息
ahc              // 删除进程的断言信息 
ah               // 显示当前的断言处理设置

对于断言也是系统的一个exception(STATUS_ASSERTION_EXCEPTION)。因此该命令只是设置指定位置断言的处理状态。而sx* asrt命令可以设置全局的断言处理状态。

访问断点 ba

访问断点有些地方也被称为数据断点。创建一个处理器断点,会在访问指定地址时中断。

ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]

// example
ba w 4 0xfffff80f`af0f0000 "k"

上面的例子就是给地址0xfffff80f`af0f0000处设置断点,当对这个地址进行写访问的时候就会执行k命令。

除了w写可以设置,e执行,r读,i I/O端口断点。Size代表需要monitor的内存长度,只能是1,2,4,8。

如果是用户态调试还能指定只给某个线程设置断点。

断点系列命令 bp, bm, bu, bs, bsc, br, bl, be, bd, bc

// 给指定指令地址设置断点
bp[ID] [Options] [Address [Passes]] ["CommandString"] 

// 给指定地址设置断点,允许当前module symbol不存在
bu[ID] [Options] [Address [Passes]] ["CommandString"] 

// 允许使用通配符*来批量设置断点。
bm [Options] SymbolPattern [Passes] ["CommandString"]

// 列出当前存在的断点
bl [/L] [Breakpoints]

// Disable断点
bd Breakpoints

// Enable断点
be Breakpoints

// 删除断点
bc Breakpoints

// 给指定断点重新编号
br OldID NewID [OldID2 NewID2 ...] 

// 更新指定断点所指定的命令
bs ID ["CommandString"]

// 更新指定条件断点的条件和命令
bsc ID Condition ["CommandString"]

对于windbg里面所操作的断点都是采用ID来编号,例如

0:007> bl
     0 e Disable Clear  00007ff8`093e52f0     0001 (0001)  0:**** ntdll!RtlInitAnsiString
     1 e Disable Clear  00007ff8`094e30f0     0001 (0001)  0:**** ntdll!RtlSetTimer
     2 e Disable Clear  00007ff8`094ee420     0001 (0001)  0:**** ntdll!RtlNtdllName

一旦通过bp等命令设置断点之后,可以使用be, bd, bc等命令来通过对应的ID来操作。

断点地址也可以指定为。bl命令会把所有命令都列出来,但是不会表明断点的类型,需要使用.bpcmds命令来显示每个断点的类型

0:007> .bpcmds
bp0 0x00007ff8`093e52f0 ;
bp1 0x00007ff8`094e30f0 ;
bp2 0x00007ff8`094ee420 ;
bu4 @!"ntdll!fltused";

对比内存 c

c Range Address

// 例子
0:007> c 0x00007ff8`094ee426 L3 0x00007ff8`094ee42a
00007ff8`094ee426  00 - 00007ff8`094ee42a  1a
00007ff8`094ee428  18 - 00007ff8`094ee42c  00

可以对比两端内存的差异,并列列出不同的内容。如例中所示其中长度指定的3,但是输出只列出了两个有差异的字节。

显示内存 d, da, db, dc, dd, dD, df, dp, dq, du, dw, ds, dS, 

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

这一系列命令都可以看作d+显示格式。其中又能分为两类,以不同格式显示binary内容和显示显示成字符或者字符串内容。du, da, ds, dS就能够显示字符和字符串内容。需要注意的是ds和dS现实的是结构体STRING, ANSI_STRING, or UNICODE_STRING。而单纯显示字符串则使用du,da。

0:007> da 00007ff8`094ee430
00007ff8`094ee430  "HDP..."
0:007> dd 00007ff8`094ee430
00007ff8`094ee430  09504448 00007ff8 00480046 00000000
// ds,dS如果接受的不是一个正确的结构体,则会显示异常
0:007> ds 00007ff8`094ee430
00000000`00480046  "????????????????????????????????"

显示指针指向的内容 dda, ddp, ddu, dpa, dpp, dpu, dqa, dqp, dqu

针对一些指针数组之类的场景,我们希望批量显示指针指向的内容,而不是指针本身的值。这时候就需要使用dd*和dp系列的命令。先看例子

0:007> da 0x000000f8`0d1ffb78
000000f8`0d1ffb78  ".&B..."
0:007> dpa 0x000000f8`0d1ffb78
000000f8`0d1ffb78  00007ff8`094226a1 ". H..I....Q)."
0:007> da 0x00007ff8`094226a1
00007ff8`094226a1  ". H..I....Q)."

如例子所示,dpa将指定的地址当作一个指针加以解释,并且将其按照asiic字符进行显示。当然其效果也等于第三个命令,直接指定指针中的地址。

相关文章:

  • 【华为机试真题JavaScript】分班
  • ctfshow SSRF
  • Nacos集群和持久化配置(重要)
  • SpringMVC框架
  • 【Arma3脚本教程】一、基本介绍
  • 【智能优化算法-粒子群算法】基于改进粒子群算法实现汽车动力传动参数优化设计附matlab代码
  • RK3399平台开发系列讲解(USB篇)URB通信过程详解
  • Golang-01Golang开发环境配置
  • Debezium系列之:永久保存history topic中的数据
  • 前端开发规范
  • 【halcon C++编程 序列化与反序列化】
  • 什么时候用Goroutine?什么时候用Channel?
  • OpenGL基础教程
  • 【光学】基于Matlab模拟光流场
  • [单片机框架][drivers层][cw2015] fuelgauge 硬件电量计(二)
  • 【React系列】如何构建React应用程序
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 2019.2.20 c++ 知识梳理
  • Bootstrap JS插件Alert源码分析
  • es6--symbol
  • Fastjson的基本使用方法大全
  • MySQL主从复制读写分离及奇怪的问题
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python连接Oracle
  • React as a UI Runtime(五、列表)
  • Redux 中间件分析
  • webpack入门学习手记(二)
  • 技术发展面试
  • 前端之Sass/Scss实战笔记
  • 设计模式走一遍---观察者模式
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (1) caustics\
  • (BFS)hdoj2377-Bus Pass
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十二)springboot实战——SSE服务推送事件案例实现
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @Builder用法
  • @软考考生,这份软考高分攻略你须知道
  • [AX]AX2012 R2 出差申请和支出报告
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [bzoj1912]异象石(set)
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [cocos2d-x]关于CC_CALLBACK