目录

  • 一丶驱动的调试.

    • 1.线程
    • 2.断点
    • 3.内存查看命令
    • 4.修改内存命令
    • 5.栈相关操作命令
    • 6.进程线程命令(内核命令)

一丶驱动的调试.

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

转载于:https://www.cnblogs.com/iBinary/p/10990672.html

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

  1. android5.1内核版本,Android-x86现已基于5.1.1 Lollipop:支持UEFI和64位内核

    由于采用了Linux 4.0.9内核,Android-x86 5.1 RC1也是首个支持64位内核的版本.此外,它还支持多点触控.UEFI启动.蓝牙.摄像头.以太网(仅HDCP).Wi-Fi.音频.以 ...

  2. 64位内核第一讲,和32位内核的区别

    64位内核第一讲,和32位内核的区别 双击调试配置请查看 连接: https://www.cnblogs.com/aliflycoris/p/5877323.html 一丶编译的区别. 首先,还是使用 ...

  3. mac开启64位内核

    sudo nvram boot-args="arch=x86_64" 查看是否是64位: 桌面左上角的小苹果,关于本机,更多信息,软件,64位内核,开启 在终端输入上面的命令就能开 ...

  4. linux 进程映射空间 libc,为什么不能在64位内核的32位Linux进程中映射(MAP_FIXED)最高虚拟页面?...

    尝试测试时是否允许访问跨越x86中零边界的内存?在Linux的用户空间中,我编写了一个32位测试程序,该程序试图映射32位虚拟地址空间的低和高页. 之后echo 0 | sudo tee /proc/ ...

  5. 64位内核第二讲,进程保护之对象钩子

    64位内核第二讲,进程保护. 一丶什么是保护. 什么是保护. 比如我们安装了xxx杀毒软件.那么此时你用任务管理器关闭.是关闭不了的.原因是内核已经做了保护. 那么去掉保护的前提就是你要给自己的软件做 ...

  6. AIX 64位内核与32位内核区别

    Q:怎么确定机器会运行 64 位内核?  A:运行 64 位内核要求 64 位硬件.对于 AIX 5.2,所有 IBM eServer pSeries 64 位硬件都能运行 64 位或 32 位内核. ...

  7. 1g的树莓派4b能做什么_树莓派4B(Raspbian)切换64位内核+简单性能测试

    首先说明两点: 1.目前来看来看(20200108测试,基于Raspbian 2019-09-26),是没有什么卵用的,切换之后性能不增反降,且软件兼容性不能得到保证. 2.教程来源于贴吧大佬,感谢大 ...

  8. win7 64位 内核安全_Win7进入死亡倒计时,全国一半电脑要遭殃?

    你还在XP么? 曾经,月月鸟以为2010年还很遥远,没想到已经过去10年了.也以为2020年遥不可及,却忽然发现还有10天不到了. 除了青春外,似乎有些东西我们不能带到下一个10年. 没错,那就是Wi ...

  9. 64位内核开发第五讲,调试与反调试

    目录 反调试与反反调试 一丶反调试的几种方法 1.DebugPort端口清零 2.KdDisableDebugger 3.ring3下的 isDebuggerpresent和CheckRemoteDe ...

最新文章

  1. android工程r红,Android Studio - 为什么R随机变为红色?
  2. Python初学问题-if/else的运用
  3. Evince中文乱码
  4. 无法载入增效工具_山东省 智能工具箱 智能工具管理 工具管理企业数字化管理...
  5. revo uninstaller pro 序列号_iPhone12/pro已下架,在天猫
  6. 机器学习算法平台alink_Alink漫谈(十二) :在线学习算法FTRL 之 整体设计
  7. 移植dropbear 实现ssh远程登录功能
  8. eclipse远程调试tomcat
  9. centos7使用kubeadm部署k8s集群(使用containerd做运行时)
  10. google 翻译 tts 语音 tk tkk代码
  11. iOS之加速计、陀螺仪(UIAccelermeter、Core Motion)
  12. 哪个表示经度?哪个表示纬度?是X是经度?还是Y表示经度?
  13. 哀其不幸的墨西哥人工智能
  14. 2018年高教社杯全国大学生数学建模竞赛题目
  15. Docker 问题集锦(15) - ERROR: for * Cannot start service *: driver failed programming external
  16. 2021-10-08 2021年起重机司机(限门式起重机)考试题库及起重机司机(限门式起重机)最新解析
  17. Font Awesome图标字体的代码列表
  18. CAC理论—一种新的CAP
  19. 初等数学O 集合论基础 第五节 群、环、域的概念
  20. 解读领跑全国的区块链发展“北京方案”:设专项基金,构建开源生态

热门文章

  1. mysql join 组合索引,图文详解MySQL中两表关联的连接表如何创建索引
  2. atom对比 vscode_几款前端IDE工具:Sublime、Atom、VSCode比较
  3. 到底什么是集群分布式
  4. android main system log,android日志缓冲区,system,radio,main,events是什么意思啊?
  5. 数字信号处理--7.4--数字滤波器
  6. 2012.4.23总结
  7. 2022年考研数据结构_4 串
  8. 移植笔记——【MCU程序移植注意事项】
  9. UART通讯协议(四)数据接收帧间隔
  10. Builder 模式在 Guava 中的应用