在上一篇文章中,咱们主要使用了三个命令 !address
,s
,.writemem
把丢失的代码成功的保存到了文件中。本文简单介绍一下上文用到的这三个命令。windows
不少命令都会用到 地址范围。好比 s
命令,.writemem
命令。bash
在 windbg
中能够经过两种形式指定地址范围。起始地址 L长度
或者 起始地址 终止地址
。在上一篇文章中,咱们使用的是 起始地址 终止地址
的形式。咱们也能够使用用 起始地址 L长度
的形式来指定一个范围。其中的 L
必不可少,并且,L
后面跟的是要查看的单位数量,不是字节数。好比,咱们查看起始地址 0xc0000
处对应的内容,一样是L4
,按字节(db
),按四字节(dd
)和按八字节(dq
)查看,显示的内存范围是不同的spa
有两点须要注意:debug
256MB
,咱们须要使用 L?
,而不是 L
。L-
表示给定的 address
是终止位置,而不是起始位置。该命令能够用来查看指定地址对应的信息,也能够用来查找过滤。在以前的文章里使用 !address
查看过某个地址对应的信息。上一篇文章中咱们主要使用的是这个命令的查找过滤功能(经过 -f
参数,f
是 filter
的缩写)。code
-f
参数须要配合 -c:"command"
在查找的过程当中执行对应的命令。cdn
该命令能够用来查找符合特定模式的内存。s
是 Search Memory
的缩写。blog
s [-[[Flags]Type]] Range Pattern s -[[Flags]]v Range Object s -[[Flags]]sa Range s -[[Flags]]su Range复制代码 |
这里仅截取 Type
的用法。更多用法请参考官方文档。内存
该命令比较简单,.writemem FileName Range
。ci
FileName
:若是路径中有空格,须要使用 ""
引发来,这个应该是常识了。unicode
Range
:相关的语法已经在本文开始介绍了。
咱们在上一篇文章中用到的命令(!address -f:heap,PAGE_READWRITE -c:"s -u %1 %2 args.Contains(\"--all\")"
)的意思是:遍历可读写的堆内存,对每一个内存区域调用 s
命令,搜寻匹配 args.Contains("--all")
的 unicode
字符串。s
命令须要的地址范围是经过 !address
命令传递过来的 %1
(起始地址) 和 %2
(结束地址) 传递的。