Windbg学习 (0x0002) 命令基础

命令分为三种:基本命令,元命令,扩展命令,其中基本命令和元命令都是内建在Windbg中的,扩展命令通过加载扩展模块提供的

基本命令:

  包括但不限于以下:

  • 调试器控制:g(go) t(trace) p(step over)
  • 寄存器修改/查看:r
  • 内存查看 修改 搜索:d e(edit) s(search)
  • 栈观察:k
  • 断点控制:BP BA BL BC BD BE
  • 线程控制(查看切换线程):~
  • 进程控制(查看进程):  |
  • 汇编(a)、反汇编(u)
  • 执行命令文件:$
  • 设置调试时间 sx
  • 查找符号(x) 搜索符号(ln) 显示模块列表(lm)
  • 退出调试: q

元命令:

  元命令以点号 :"." 开始,提供以下功能

  • 调试器和调试会话设置的显示与设置
  • 控制调试目标、调试会话或者调试器 .sleep .restart .create .attach
  • 控制模块 .load .unload .unloadall .chain(查看加载的模块列表)
  • 远程调试 .remote(链接到远程调试服务器)  .server(启动远程调试服务器)
  • 日志
  • 内建的命令程序关键字 .if .else 等

扩展命令:

  以 叹号:"!"开始,提供扩展功能,通过动态加载(.load)扩展模块(例如 sos.dll)实现。

  扩展模块所在目录:

  

主要的扩展模块及其应用

除了Windbg会根据当前的Workspace的需要加载必要的扩展模块外,可以通过以下方式手动加载扩展模块:

命令输入

  • 注释 *  或者 $$ ;($$开始注释  ;结束注释)
  • ; 分割多个命令
  • 回车执行上一条命令
  • 上下箭头 浏览执行过的命令

命令别名

.echo 显示别名内容

Wingbd自动别名

 使用 $别名

用户别名

使用 : ${别名}

  • 定义 : as  v version
  • 使用  ${别名}   例如    ${v} 相当于调用 version

      显示别名内容 .echo ${v}

      *最好使用这种形式 :${别名}  明确指明这是个别名  并且最好加大括号 区分与其他命令连接时候的分界

固定别名:

 使用 : $别名 ($u0- $u9)

  • 定义 :r $u0 = version
  • 使用 :$u0  相当于调用 version $u0 不需要使用加大括号的形式 例如 ${u0}

伪寄存器

 

 可以像使用别名一样使用伪寄存器

TIPS 推荐再使用伪寄存器前加一个@,例如 @$ptrsize

流程控制 (循环 条件)

 z

r ecx=2;*设定 ecx

r ecx=ecx-1; r ecx ; z(ecx); r ecx =ecx+1;

 r ecx=ecx-1$$减一; r ecx $$显示; z(ecx)$$检查 如果为 true 执行前面的语句 否则 执行后面的语句; r ecx =ecx+1;

j

j 'expression' 'command 1','command2'

.if .else .elseif

进程线程限定符

 

日志

 .logopen .logclose .logfile

原文地址:https://www.cnblogs.com/ywnwa417/p/5675810.html