在上一篇文章中,咱們主要使用了三個命令 !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
的縮寫)。3d
-f
參數須要配合 -c:"command"
在查找的過程當中執行對應的命令。code
該命令能夠用來查找符合特定模式的內存。s
是 Search Memory
的縮寫。cdn
s [-[[Flags]Type]] Range Pattern s -[[Flags]]v Range Object s -[[Flags]]sa Range s -[[Flags]]su Range複製代碼 |
這裏僅截取 Type
的用法。更多用法請參考官方文檔。blog
該命令比較簡單,.writemem FileName Range
。內存
FileName
:若是路徑中有空格,須要使用 ""
引發來,這個應該是常識了。ci
Range
:相關的語法已經在本文開始介紹了。
咱們在上一篇文章中用到的命令(!address -f:heap,PAGE_READWRITE -c:"s -u %1 %2 args.Contains(\"--all\")"
)的意思是:遍歷可讀寫的堆內存,對每一個內存區域調用 s
命令,搜尋匹配 args.Contains("--all")
的 unicode
字符串。s
命令須要的地址範圍是經過 !address
命令傳遞過來的 %1
(起始地址) 和 %2
(結束地址) 傳遞的。