從堆裏找回「丟失」的代碼相關命令簡介

前言

在上一篇文章中,咱們主要使用了三個命令 !addresss.writemem 把丟失的代碼成功的保存到了文件中。本文簡單介紹一下上文用到的這三個命令。windows

windbg 中的地址範圍語法

不少命令都會用到 地址範圍。好比 s 命令,.writemem 命令。bash

windbg 中能夠經過兩種形式指定地址範圍。起始地址 L長度 或者 起始地址 終止地址。在上一篇文章中,咱們使用的是 起始地址 終止地址 的形式。咱們也能夠使用用 起始地址 L長度 的形式來指定一個範圍。其中的 L 必不可少,並且,L 後面跟的是要查看的單位數量,不是字節數。好比,咱們查看起始地址 0xc0000 處對應的內容,一樣是L4,按字節(db),按四字節(dd)和按八字節(dq)查看,顯示的內存範圍是不同的spa

display-by-range

有兩點須要注意:debug

  1. 若是搜尋的範圍超過256MB,咱們須要使用 L? ,而不是 L
  2. 咱們能夠使用 L- 表示給定的 address 是終止位置,而不是起始位置。

range-specifier

!address 命令

該命令能夠用來查看指定地址對應的信息,也能夠用來查找過濾。在以前的文章裏使用 !address 查看過某個地址對應的信息。上一篇文章中咱們主要使用的是這個命令的查找過濾功能(經過 -f 參數,ffilter 的縮寫)。3d

  • 咱們能夠根據用途過濾,具體參考下表。

filt-by-memory-usage

  • 還能夠根據內存保護屬性過濾,具體參考下表。

filt-by-memory-protection

  • 還能夠根據內存狀態過濾,具體參考下表。

filt-by-memory-status

  • 還能夠根據內存類型過濾,具體參考下表。

filt-by-memory-type

-f 參數須要配合 -c:"command" 在查找的過程當中執行對應的命令。code

option-c

s 命令

該命令能夠用來查找符合特定模式的內存。sSearch Memory 的縮寫。cdn

s [-[[Flags]Type]] Range Pattern s -[[Flags]]v Range Object s -[[Flags]]sa Range s -[[Flags]]su Range複製代碼

這裏僅截取 Type 的用法。更多用法請參考官方文檔。blog

search-type

.writemem 命令

該命令比較簡單,.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(結束地址) 傳遞的。

參考資料

相關文章
相關標籤/搜索