前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >64位内核第三讲,Windbg的使用.以及命令

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

作者头像
IBinary
发布2019-06-14 14:31:18
1.8K0
发布2019-06-14 14:31:18
举报
文章被收录于专栏:逆向技术逆向技术

一丶驱动的调试.

编写驱动免不了调试.所以这里介绍一下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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一丶驱动的调试.
    • 1.线程
      • 2.断点
        • 3.内存查看命令
          • 4.修改内存命令
            • 5.栈相关操作命令
              • 6.进程线程命令(内核命令)
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档