专栏首页逆向技术64位内核第三讲,Windbg的使用.以及命令

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 条评论
登录 后参与评论

相关文章

  • 脱壳->内存断点法脱壳

    首先我们要明白一个壳, 常见的壳都是 先保存寄存器 保存OEP等.最后 跳转到OEP 也就是入口点去执行代码

    IBinary
  • PE知识复习之PE的两种状态

    关于结构体的各项属性.前边已经写过了.本系列博客就是加深PE印象.理解复杂的原理.

    IBinary
  • PE知识复习之PE的节表

    节表重要成员都标红了.我们知道.PE文件有两种状态.一种是内存状态.一种则是文件状态.

    IBinary
  • php查询内存信息操作示例

    砸漏
  • Android内存管理(三)内存管理基础

    CPU只能访问其寄存器(Register)和内存(Memory), 无法直接访问硬盘(Disk)。存储在硬盘上的数据必须首先传输到内存中才能被CPU访问。从访问...

    Anymarvel
  • DDR3内存频率标识对应

    py3study
  • Redis入坟(八)内存管理与优化,面试必考

    本篇内容包括 1. 内存消耗分析 2. 管理内存的原理与方法 3. 内存优化技巧

    源码之路
  • 疑案追踪:Spring Boot内存泄露排查记

    在项目迁移到Spring Boot之后,发生内存使用量过高的问题。本文介绍了整个排查过程以及使用到的工具,也非常适用于其他堆外内存排查。

    美团技术团队
  • 为什么现在的内存分配方式可以支持递归?

    程序员编程需要预计变量大小,指定特定内存大小给变量,无法通过代码动态给变量分配内存。程序中声明的变量在编译期间就已经被绑定到目标内存。

    城市中的游牧民族
  • 为什么现在的内存分配方式可以支持递归?

    版权声明:可转载,需要明确注明转载出处和链接;不允许商业用途。 https://blog.csdn.net/bengxu/article/details...

    城市中的游牧民族

扫码关注云+社区

领取腾讯云代金券