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 | 上面设置了开关,下面就要进行关闭. |
64位内核第三讲,Windbg的使用.以及命令的更多相关文章
- 64位内核注冊tty设备
在64位系统中,注冊tty设备须要注意的是,Android跑在EL0而且在32位模式下,kernel跑在EL1而且在64位模式下,不但内核须要打开CONFIG_COMPAT选项,非常多android上 ...
- Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?
有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...
- 64位Windows的Dos中取消了edit命令
前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...
- 64位内核开发第六讲,Windbg调试ring3跟Ring0.一起调试
目录 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 有时候我们调试一个程序.可以使 ...
- 64位内核开发第四讲,查看SSDT表与showSSDT表
目录 SSDt表与ShadowSSDT表的查看. 一丶SSDT表 1.什么是SSDT表 2.查看步骤 二丶ShadowSSDT表 1.什么是ShadowSSDT表 2.如何查看. 三丶工具介绍 SSD ...
- 64位内核开发第二讲.内核编程注意事项,以及UNICODE_STRING
目录 一丶驱动是如何运行的 1.服务注册驱动 二丶Ring3跟Ring0通讯的几种方式 1.IOCTRL_CODE 控制代码的几种IO 2.非控制 缓冲区的三种方式. 三丶Ring3跟Ring0开发区 ...
- 64位内核开发第十二讲,进程监视,ring3跟ring0事件同步.
一丶同步与互斥详解,以及实现一个进程监视软件. 1.用于线程同步的 KEVENT 事件很简单分别分为 事件状态. 以及事件类别. 事件状态: 有信号 Signaled 无信号 Non-signaled ...
- Debian 64位内核升级步骤
安装相关依赖包 apt-get install bzip2 libncurses5-dev kernel-package zlib1g-dev gcc make kernel-package wget ...
- 基于FreeBSD 64位内核的kFreeBSD无法在Virtualbox下安装
ArchBSD同上 感谢大A(豆瓣)的投稿 :)
随机推荐
- web API .net - .net core 对比学习-使用Swagger
根据前两篇的介绍,我们知道.net web api 和 .net core web api在配置方面的不同如下: 1. .net web api的配置是在 App_Stat文件夹里面添加对应的配置类, ...
- 一个 Vim 重度用户总结的 vim 超全指南
我本人是 Vim 的重度使用者,就因为喜欢上这种双手不离键盘就可以操控一切的feel,Vim 可以让我对文本的操作更加精准.高效. 对于未使用过 Vim 的朋友来说,可能还无法体会到这种感觉.由于使用 ...
- VBA 字符串-相关函数(6-12)
Mid()函数 Mid()函数返回给定输入字符串中指定数量的字符. 语法 Mid(String,start[,Length]) 参数 String - 必需的参数.输入从中返回指定数量的字符的字符串. ...
- js造成内存泄漏的几种情况
1.介绍js的垃圾回收机制 js的垃圾回收机制就是为了防止内存泄漏的,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的 ...
- MongoDB 4.2.1 安装失败,提示 verify that you have sufficient privileges to start system services 解决
官网下载地址:https://www.mongodb.com/download-center/community 问题: 解决:直接安装在根目录 测试:
- Oracle 检索数据(查询数据、select语句)
用户对表或视图最常进行的操作就是检索数据,检索数据可以通过 select 语句来实现,该语句由多个子句组成,通过这些子句完成筛选.投影和连接等各种数据操作,最终得到想要的结果. 语法: select ...
- sql server 处理特殊字符问题
对于中文版的SQL SERVER,默认安装后使用的默认排序规则为Chinese_PRC_CI_AS,在此排序规则下,使用varchar类型来可以“正常存取”存放中文字符以及一些东南亚国家的字符, 同时 ...
- 关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法
3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可. #yum install libffi-devel -y#make install若在安装前移除了/usr/bin ...
- Django图书管理系统(前端对数据库的增删改查)
图书管理系统 出版社的管理 源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E7%9B%AE/ ...
- JSON空值处理与 StringUtils工具类使用
JSON 动态查询时,需要的条件本应是null,前端传入的是" " //null转换为"" private static ValueFilter filter ...