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!fun

bu模块名加函数下段点.

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

显示当前栈,显示当前函数的所有参数

ChiEbp

RetAddre

Args

上一层的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

上面设置了开关,下面就要进行关闭.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券