64位内核第三讲,Windbg的使用.以及命令

一丶驱动的调试.

编写驱动免不了调试.所以这里介绍一下WinDbg的常用命令.

1.线程

命令作用
~*显示所有线程
~.显示当前活动线程
~#显示当前异常线程
~ num显示第num个线程.
~ num s切换到第num个线程
~*kb显示所有线程的栈

额外命令

命令作用
.detach取消附加你调试的进程
.attach pid附加你想调试的进程.需要16进制的pid

2.断点

命令作用
bl列出系统中已经有的断点
bc清除断点例如: bc 1 -10 删除1 -10的断点. bc*清除全部
bd禁用断点,但不清除.
be激活断点.
bp [address][模块名字][偏移]下断点 bp xxModule!DisPatchRead + 0x30
bu module!funbu模块名加函数下段点.
bm module!fun*支持通配符.不支持加偏移下载.
ba [w len] [r len] [e len] address支持下内存断点 w写断点 len代表长度. address 代表在address下w len长度的内存写断点 r读,e执行.
bp /p eprocess [address][func]可以对下进程断点,只用xx进程调用这个代码的时候才会断下来
bp /t ethread [address][fun]对线程下端点.某个线程调用就能断下来.

区别:
bp 下的断点是死断点.函数名字变了但断点还是在哪里.
bu 自动跟你你的函数进行下段点.不用担心会变.
在新的windbg中,bp失败.会自动换成bu.

3.内存查看命令

dt命令可以查看一些结构

命令作用
dt nt!_EPROCESS查看nt模块中定义的EPROCESS结构
dt nt!_EPROCESS -r列出结构中的结构
dt nt P*xxx通配符方式,列出所有中带有P开头的接结构
dt Address 结构知道这个结构所在的地址.输入则可以将这块内存解释为这个结构.
x nt!Zw查找所有Zw开头的函数.

内存数据类型显示命令

命令作用
db [address] [L number]以一个字节显示值和Ascii字符
dw [address] [L number]内存按照2个字节显示
dd [address] [L number]内存按照4个字节显示
dp [address] [L number]32位下等同于dd. 64位下等同于dq
dq [address] [L number]内存以8个字节显示
df [address] [L number]内存以4个字节浮点数显示

db 0x800000 L4 以一个字节显示内存.显示长度为4 * sizeof(db )个
字节.

读取内存中的指针
我们上面的d开头的命令你只能查看这个值.这个值有可能是存储指针.
我们除非在进行一次d命令才可以,下面的命令直接就可以

命令作用
ddp
dpp
dqp
ddu
dpu
dqu
dda
dpa
dqa

d表示4个字节. q表示8个字节. p 32位下4个字节.64位下8个字节.
所以p是可以灵活转化的.
所以上面的命令可以简化为

命令作用
dpa
dpu
dpp [len]显示局部变量的值
dps
dv显示局部变量的值,看变量的起始地址是ebp-xxx是

p: DWORD或者Qword
a: Ascii
u: UNICODE
所以上面的命令可以解析一下
如:
dpa
d: 命令前缀
p: 根据32位还是64位,分别以4个字节.或者8个字节显示
a: Ascii吗.
所以意思就是: 解析地址里面的值.如果是指针.则以32/64位显示为AscII码.

字符相关

命令作用
da显示ascii值
du显示unicode值
ds显示ANSI_STRING的值
dS显示UNICODE_STRING的值.注意大小写.

4.修改内存命令

命令作用
eb [address] value修改一个字节,很重要.可以改代码的机器码.
ed [address] value修改4个字节
eD [address] value
ef [address] value修改float内存
ep [address] value修改指针内存
eq [address] value
ew [address] value
ea [address] value
eu [address] value
eza[address] value
ezu [address]value

关于修改内存.只需要熟悉 eb ed即可.

5.栈相关操作命令

命令作用
kv显示当前栈的调用情况.显示函数的前3个参数
!irp address查看当前Irp的值.
kp显示当前栈,显示当前函数的所有参数

1197364-20190518223005008-444158290.png

ChiEbpRetAddreArgs
上一层的EBP当前函数返回地址当前调用函数的参数

6.进程线程命令(内核命令)

命令作用
!process 0 0列出系统进程信息
!process 0 7列出系统进程详细信息
!process EPROCESS 7列出进程详细信息
.process /p EPROCESS进入该进程上下文,如果不切换查看他的信息查看不到.
.thread ETHREAD进入该线程上下文
!thread ETHREAD查看线程结构
.logopen d:\xx.txt开关语句. 显示的所有内容都重定向到xx.txt
.logclose上面设置了开关,下面就要进行关闭.

转载于:https://www.cnblogs.com/iBinary/p/10990672.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值