當我們在調試器中分析問題時, 經常需要查看不同內存塊的內容以分析產生的原因, 并且在隨后驗證所做出的假設是否正確. 由于各個對象的狀態(tài)都是保存在內存中的, 因此內存的內容也就相當于對象的狀態(tài).
d命令最常見的格式就是根據指定的類型信息來顯示存儲在某地址中的數據. 調試器并不會去猜測這個地址上存儲的是什么數據, 因為在大多數情況下猜測都是錯誤的. 所以需要用戶顯式地制定按照何種格式來解析數據. 命令格式如下:
這里順便把計算機中的計量單位也總結一下吧. ============ bit(比特) – 1 or 0 1 byte(字節(jié)) = 8 bit(比特) 1 word(字) = 2 byte = 16 bit 1 dword(雙字) = 4 byte = 32 bit 1 qword(四字) = 8 byte = 64 bit
1 ASCII character = 1 byte 1 Unicode character = 2 byte
另一種方式 - d*s =========== 該命令形式可以將內存區(qū)域轉儲出來, 并且將內存中的每一個元素都視作一個單元對其進行解析. 這個命令有三種形式, 通常被稱之為d*s命令. dds 將四個字節(jié)視作一個單元 dqs 將八個字節(jié)視作一個單元 dps 則根據當前處理器架構來選擇最合適的長度. 它將每個從內存讀取出來的值都作為某種數據類型的指針.
在內存中搜索某個值 - 命令s ============ 命令s(表示搜索search), 是一個非常有用的命令, 可以用來在調試目標內找出已知的值. 這個命令的參數包括素要搜索的類型和值.
其中-d代表雙字DWORD, 是搜索的類型. 其他類型例舉如下:
查看內存的每個位置上都包含著什么 ============== 在調試時, 對象和棧都包含了大量的指針, 我們無法很快地猜測出他們所表示的數據. 雖然我們可以很容易地將內核空間的地址與用戶態(tài)空間的地址分開, 但要把一個表示棧的地址和一個表示堆的地址區(qū)分開卻不容易. 我們可以使用一個很有用的擴展命令!address <your address>來解決這個問題. 該命令的參數為一個地址, 如果沒有指定地址參數, 那么這個擴展命令將搜索并且枚舉所有的內存區(qū)域并給出詳細的信息.
參考資料: WinDBG幫助文件 <<AWD>> |
|