一丶驱动的调试.

编写驱动免不了调试.所以这里介绍一下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 上面设置了开关,下面就要进行关闭.

64位内核第三讲,Windbg的使用.以及命令的更多相关文章

  1. 64位内核注冊tty设备

    在64位系统中,注冊tty设备须要注意的是,Android跑在EL0而且在32位模式下,kernel跑在EL1而且在64位模式下,不但内核须要打开CONFIG_COMPAT选项,非常多android上 ...

  2. Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?

    有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...

  3. 64位Windows的Dos中取消了edit命令

    前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...

  4. 64位内核开发第六讲,Windbg调试ring3跟Ring0.一起调试

    目录 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 有时候我们调试一个程序.可以使 ...

  5. 64位内核开发第四讲,查看SSDT表与showSSDT表

    目录 SSDt表与ShadowSSDT表的查看. 一丶SSDT表 1.什么是SSDT表 2.查看步骤 二丶ShadowSSDT表 1.什么是ShadowSSDT表 2.如何查看. 三丶工具介绍 SSD ...

  6. 64位内核开发第二讲.内核编程注意事项,以及UNICODE_STRING

    目录 一丶驱动是如何运行的 1.服务注册驱动 二丶Ring3跟Ring0通讯的几种方式 1.IOCTRL_CODE 控制代码的几种IO 2.非控制 缓冲区的三种方式. 三丶Ring3跟Ring0开发区 ...

  7. 64位内核开发第十二讲,进程监视,ring3跟ring0事件同步.

    一丶同步与互斥详解,以及实现一个进程监视软件. 1.用于线程同步的 KEVENT 事件很简单分别分为 事件状态. 以及事件类别. 事件状态: 有信号 Signaled 无信号 Non-signaled ...

  8. Debian 64位内核升级步骤

    安装相关依赖包 apt-get install bzip2 libncurses5-dev kernel-package zlib1g-dev gcc make kernel-package wget ...

  9. 基于FreeBSD 64位内核的kFreeBSD无法在Virtualbox下安装

    ArchBSD同上 感谢大A(豆瓣)的投稿 :)

随机推荐

  1. 实现负载均衡的小demo

    首先我们先来了解负载均衡: 负载均衡是为了缓解网络压力的,服务器端进行扩容的重要手段 实现有两种方式:硬件F5    .   软件nginx.Dubbo 为了实现负载均衡的原理,我们基于以下两篇随笔继 ...

  2. Core Animation笔记(特殊图层)

    1.shapeLayer: 渲染快速,内存占用小,不会被图层边界裁掉(可以在边界之外绘制),不会像素化(当做3D变化如缩放是不会失真) CGRect rect = self.containerView ...

  3. robot framework笔记(三):扩展SeleniumLibrary库 (自定义关键字)

    (一)自定义和浏览器相关的关键字 以下代码GitHub 版本库地址: https://github.com/blairwind/blog_rf SeleniumLibrary的扩展文档中提供了3种增加 ...

  4. Scrapy 概览笔记

    本项目代码可参考 imzhizi/myspider: a scrapy demo with elasticsearch 虚拟环境的创建 建议爬虫项目都创建虚拟环境 虚拟环境在 Python 项目中真的 ...

  5. [ipsec] 特别硬核的ike/ipsec NAT穿越机制分析

    〇 前言 这怕是最后一篇关于IKE,IPSEC的文字了,因为不能没完没了. 所以,我一直在想这个标题该叫什么.总的来说可以将其概括为:IKE NAT穿越机制的分析. 但是,同时它也回答了以下问题: ( ...

  6. SELinux 权限设置

    SELinux 权限设置 一.SELinux简介 SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)领导开发的GP ...

  7. linux的vim基本使用

    转自:https://www.cnblogs.com/qq631243523/p/10191714.html 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在 ...

  8. 0029redis单机版环境搭建

    linux环境下安装单机版redis,主要分为如下几步: 1. 安装gcc 2.下载安装包 3.解压安装包 4.进入解压目录并执行make和make install命令 5.查看默认安装目录 6.更改 ...

  9. SQl Server 数据库多表连接

    [缘由] 为了防止数据的冗余,我们会将数据库中表进行拆分,这样就产生了多张表,表与表之间通过主外键关联,但这样又造成了我们查找和修改的困难,如何进行多表之间的查找呢? 我们将一个查询同时设计两个或两个 ...

  10. 在eclipse运行一个项目报端口被占的问题

    1.端口被占问题解决方法. 我们运行javaweb项目的时候,如果不幸你的项目出现了上图的那种情况,不要慌,仅仅是端口被占了而已,只需要打开你tomcat里面的bin里面的shutdown.bat即可 ...