Windbg常用指令(持续更新)

  • 1、!drvobj
  • 2、dt _DRIVER_OBJECT 地址
  • 3、 bp 设定调试断点
  • 4、P
  • 5、U
  • 6、R
  • 7、D
  • 8、 lmf
  • 9、 lmf!address eax
  • 10、 vertarget
  • 11、 !peb
  • 12、 lmvm
  • 13、 E
  • 14、 k
  • 15、 X

1、!drvobj

!drvobj 扩展命令显示DRIVER_OBJECT的详细信息。
语法

!drvobj DriverObject [Flags]

参数
DriverObject
指定驱动对象。可以是DRIVER_OBJECT的16进制地址或者驱动的名字。
Flags
(Windows 2000和之后) 可以是下面这些位的任意组合。(默认为0x01。)

Bit 0 (0x1)显示驱动拥有的设备对象。
Bit 1 (0x2)显示驱动的dispatch例程的入口点。
Bit 2 (0x4)显示驱动的设备对象的详细信息(需要设置bit 0)。

DLL
Windows 2000 Kdextx86.dll
Windows XP和之后 Kdexts.dll

注释

如果DriverObject指定设备名,但是没有带前缀,则假定使用\Driver\前缀。注意该命令在使用表达式求值器前会检查DriverObject是否是合法地址或者设备名。

如果DriverObject是一个地址,它必须是DRIVER_OBJECT结构的地址。这可以通过检查传递给DriverEntry函数的参数得到。

该扩展命令会显示指定的驱动程序创建的所有设备对象的立标。还会显示该驱动对象注册的所有fast I/O例程。

下面是一个Symbios Logic 810 SCSI 小端口驱动程序的例子:

kd> bp DriverEntry // breakpoint at DriverEntry

kd> g
symc810!DriverEntry+0x40:
80006a20: b07e0050 stl t2,50(sp)

kd> r a0 //address of DevObj (the first parameter)
a0=809d5550

kd> !drvobj 809d5550 // display the driver object
Driver object is for:
\Driver\symc810
Device Object list:
809d50d0

还可以使用!devobj 809d50d0来获得设备对象的信息。

2、dt _DRIVER_OBJECT 地址

dt命令主要用来查看相关的变量,结构体等的信息,它配合一些参数使用可以 获取想要的信息。

3、 bp 设定调试断点

(1)比如可以这样写:0:018>bp notepad!WinMain 在notepade的winmain函数处下断点。
断点的位置可以用符号来表示,如上,也可以直接用地址以及windbg的Pseudo_Register(虚拟寄存器)。

比如,我们用exentry表示进程的入口,那么可以用bp@exentry表示进程的入口,那么可以用bp @exentry表示进程的入口,那么可以用bp@exentry在进程的入口设置断点。

(2)如果notepade的winmain的入口地址为01006420,那么断点也可以这么写:
Bp 01006420
bp mysource.cpp:143` ‘j (poi(MyVar)”0x20) ‘’’’; ‘‘g’’ ’
意思就是:当myvar的值等于0x20时,g命令继续执行;
(3)下面一个设置条件断点
0:001> bp exceptioninject!foo3 “k; .echo ‘breaks’ ; g”
在exceptioninject!foo3上设置断点后,每次断下来后,先用k显示callstack,然后用.echo命令输出简单的字符串‘breaks’,最后g命令继续执行。
(4)下面看一个更复杂的设置条件断点的例子:
ba w4 execptioninject!i ”j(poi(exceptioninject!i)<0n40) ‘.printf//”exceptioninject!i value is :%d//”,poi(exceptioninject!i); g’ ; ‘.echo stop!’ ”
首先ba w4 exceptioninject!i 表示在修改exceptioninject!i这个全局变量的时候,停下来;
j(judge)命令的作用就是对后面的表达式作条件判断如果为true,执行第一个单引号里面的命令,否则执行第2个单引号里面的命令,
条件表达式是(poi(exceptioninject!i)<0n40),在windbg中excepioninject!i符号表示符号所在的内存地址,而不是符号的数值,相当于c语言的&操作符的作用,poi命令就是取这个地址上的值,相当于c语言的*操作符。

所以这个条件判断的意思就是判断exceptioninject!i的值,是否小于十进制的40。如果为真,就执行第一个单引号,‘.printf//”exceptioninject!i value is :%d//”,poi(exceptioninject!i); g’,如果为假,就执行第二个单引号‘.echo stop!’
第一个单引号里有三个命令,.printf .echo 和g。这里的printf和c语言的printf函数语法一样,不过由于这个printf命令本身是在ba命令的双引号里面,所以需要用//来转义print中的引号。第一个引号的作用是:打印出当前exceptioninject!i的值,.echo命令换行 g命令继续执行
第二个引号的作用就是显示stop,由于后面没有g命令,所以windbg会停下。

4、P

跟踪指令

5、U

数据查看指令
eg: 在上一步中我们使用跟踪指令P,看到了一句call esi,这时,我们使用u指令,查看call的这个esi究竟是什么函数
u esi
补充:nt! 是什么意思
ntfs 是什么意思

6、R

命令显示和修改寄存器上的值

7、D

da

显示ascii码

dc

按单字节显示字符

db

按单字节显示

dd

按4字节显示

dD

按8字节显示(64位下常用)

df

按浮点显示

dp

按4字节或者8字节显示(取决于是32位系统还是64位系统)

dw

按2字节显示

dW

按2字节显示字符

dyb

按二进制位显示(一字节一组)

dyd

按二进制位显示(4字节一组)

8、 lmf

列出当前进程中加载的所有dll文件和对应的路径

9、 lmf!address eax

查看对应内存页的属性

10、 vertarget

显示当前进程的大致信息

11、 !peb

显示process Environment Block

12、 lmvm

查看任意一个dll的详细信息

13、 E

命令可以用来修改内存地址
跟d命令一样,e命令后面也可以跟类型后缀,比如ed命

14、 k

命令用来显示当前线程的堆栈,如下

跟d命令一样,k后面也可以跟很多后缀,比如kb kp,kn,kv,kl等,这些后缀控制了显示的格式和信息。

KB显示三个参数;

Kp显示所有的参数,但需要Full Symbols或Private PDBSymbols支持。KP与Kp相似,只是KP将参数换行显示了;

Kv用于显示FPO和调用约定;

KD,用于显示Stack的Dump,在跟踪栈时比较有用。
这些指令区分大小。

15、 X

查找符号的二进制地址如下

希望大家可以有所收获,主要用于平时的指令记录(持续更新)。

[知识小节]Windbg常用指令(笔记本)相关推荐

  1. WinDbg 常用指令

    参考网址:https://www.jianshu.com/p/56ff0bc43d3d?tdsourcetag=s_pcqq_aiomsg 断下 ctrl + break 运行 f5 或 g 打印字符 ...

  2. Linux常用基础知识必备三之常用指令及操作

    Linux常用基础知识必备三之常用指令及操作 1.vi和vim vi如何使用 vi几种模式下的操作指令 命令模式进入编辑模式 命令模式下的快捷键 底行模式(指按了esc键之后输入按键:后出现) 字符串 ...

  3. linux查看进程运行日志文件,【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件...

    1.说出 10 个 linux 常用的指令 1) ls 查看目录中的文件 2)cd /home 进入 '/ home' 目录:cd .. 返回上一级目录:cd ../.. 返回上两级目录 3)mkdi ...

  4. angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?

    大家好,我是IT修真院郑州分院第七期的学员冯亚超,一枚正直纯洁善良的WEB程序员 今天给大家分享一下,题目angular js 常用指令ng-if.ng-class.ng-option.ng-valu ...

  5. linux常用指令(持续更新)

    linux常用指令(持续更新) 基本访问指令: 直接进入用户的home目录: cd ~ 进入上一个目录: cd - 进入当前目录的上一层目录: cd .. 进入当前目录的上两层目录: cd ../.. ...

  6. CSGO控制台与常用指令

    这篇文章我会详细的介绍CSGO控制台.指令系统.设置方面的知识,有点晦涩,希望各位能在阅读的过程中时不时昏睡过去( ͡° ͜ʖ ͡°). 控制台 V社(Valve)的Source起源引擎制作的游戏都可 ...

  7. Centos 8 常用指令汇总

    主要目录结构 / #根目录 ├── bin -> #(/usr/bin . /usr/local/bin) 目录存放着最经常使用的命令 ├── boot #系统启动文件 ├── dev #设备文 ...

  8. mc服务器常用指令_我的世界建造服务器常用指令什么样 常用指令一览

    我的世界建造服务器常用指令什么样常用指令一览,如何你要接触我的世界那么建造服务常用指令一定是要了解的知识,因为这个关乎每个玩家在游玩我的世界服务器时息息相关的事情.这也是我的世界的精髓所在. 主城保护 ...

  9. Windows BAT脚本常用指令解析

    BAT脚本入门 一.概述 首先解决第一个问题,什么是BAT脚本? BAT脚本也叫批处理文本,批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键 ...

最新文章

  1. Linux下getsockopt/setsockopt 函数说明
  2. 如何初始化一个定长ListT
  3. 利用Javadoc工具生成api文档
  4. 常见电子元件实物照片
  5. 公司培训文档-JavaScript[对象.属性]集锦
  6. 九、MySQL常见约束相关知识总结 学习笔记 + 强化复习(六大约束)
  7. 给你人生的启迪飞鸽传书
  8. Linux-Shell脚本学习心得(第二天)
  9. php 开发环境配置,开发环境配置
  10. c++ 二维数组_C|数形结合理解数组指针、指针数组、一级指针来遍历二维数组
  11. Android-JNI开发系列《二》-在jni层的线程中回调到java层
  12. linux arm 物理内存,linux – 如何在Arm Architecture硬件上进行内存测试? (像Memtest86这样)...
  13. 基于ORL库的PCA人脸识别系统matlab实现
  14. 兰州大学本科毕业论文答辩PPT模板
  15. 债券估值-零息债券、附息债券和永久债券
  16. 爬虫python是什么意思_python爬虫是什么? 【黑马程序员】
  17. Qt 显示图片 放大 缩小 移动
  18. 毕设 深度学习图像风格迁移
  19. Java中double类型保留两位小数
  20. 基于matlab数字交换网络的仿真,基于MATLAB数字交换网络的仿真

热门文章

  1. 【TARS】分布式存储系统DCache
  2. axios-身体质量测试
  3. Adobe有些软件出现“遇到问题需要关闭”问题的解决办法
  4. 沉浸式状态栏和虚拟键盘冲突
  5. 蔡高厅老师 - 高等数学阅读笔记 - 12 不定积分(48、49、50~53)
  6. skydrive服务器位置,个人云存储SkyDrive的特点
  7. 人体骨骼关键点检测AP值AP@s
  8. swift桌面软件_为什么您的软件无法Swift投放市场
  9. DataMatrix识别及定位项目笔记(1)——基于QT+libdmtx-0.7.5的DataMatrix生成器
  10. 四川星利恒电商:拼多多无货源怎么开店