windbg-内存破坏实例分析
以下實例來自AWD
代碼:
[cpp]?view plaincopy編譯,生成Release,運行,選1再選2再選1,程序崩潰,打開Dump:
[cpp]?view plaincopy加載符號文件:
[cpp]?view plaincopy查看堆棧:
[cpp]?view plaincopy看下58行代碼,使用了???g_AppInfo->PrintAppInfo();
我們猜測,g_AppInfo的兩個成員無效,因為wprintf調用的就是它們
找到g_AppInfo,列出它的成員:
[cpp]?view plaincopy注意,這里dt要用CAppInfo告訴它解析的地址類型
那我們再來看看這兩個局變量的內容:
[cpp]?view plaincopy我們發現第一個變量竟然是不可訪問的,找到問題了,
[cpp]?view plaincopy原來第一個變量竟然成了字符串Corrupt,查看代碼,我們發現在按2時,程序強行把字符串"Corrupt"寫入了
?
?
一些的指導性的建議和策略:
1通過命令dc將指針的內存內容轉儲出來,dc可以將內存內容以雙字形式轉儲出來,如果在輸出中看到有任何的字符串,那么可以通過命令da或du把字符串轉儲出來
2通過!address收集關于內存的信息,!address可以告訴你內存的類型(如私有內存),保護級別(讀取和寫入),狀態(已提交或保留)和用途(棧或堆)
3.通過dds命令將內存轉儲為雙字或者符號,這有助于將內存和特定的類型關聯起來,
4.通過dpp命令對指針解引用,并且以雙字形式轉儲出內存的內容,如果有任何一個雙字匹配某個符號,那么這個符號也會被顯示,如果在指針指向的內存中包含了一個虛函數表,那么
這種技術是非常有用的
5.通過dpa和dpu將指針指向的內存分別顯示為ASII格式和Unicode格式
6.如果內存的內容是個很小的數值(4的值數)那么它可能是一個句柄,可以通過!handle來轉儲這個句柄的信息.
總結
以上是生活随笔為你收集整理的windbg-内存破坏实例分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python爬虫抓站的一些技巧总结
- 下一篇: libevent evhttp学习——h