利用 RAMMap 來清記憶體的資料。
Download Path:
https://technet.microsoft.com/en-us/sysinternals/rammap.aspx
2016年4月15日 星期五
2013年10月3日 星期四
Symbols and Symbol Files
當程式做完連結 (link) 後,連結器 (Linker) 除了產生 .exe 和 .dll 檔之外,也會額外產生
symbol 檔。symbol 檔包含了執行程式時所不需要的資料,但在除錯上就極為有用:
這些每一個項目都稱為 symbol,所以一個 symbol 檔會包含有很多 symbols,
symbol 檔的副檔名為 .pdb 或 .dbg,Visual C++ 6.0 Linker 之後只會產生 .pdb。
Ref: http://msdn.microsoft.com/en-us/library/windows/hardware/ff558825(v=vs.85).aspx
symbol 檔。symbol 檔包含了執行程式時所不需要的資料,但在除錯上就極為有用:
- 全域變數
- 區域變數
- 函式的名稱還有進入點的位址
- Frame pointer omission (FPO) 的紀錄
- 原始碼的行號
這些每一個項目都稱為 symbol,所以一個 symbol 檔會包含有很多 symbols,
symbol 檔的副檔名為 .pdb 或 .dbg,Visual C++ 6.0 Linker 之後只會產生 .pdb。
Ref: http://msdn.microsoft.com/en-us/library/windows/hardware/ff558825(v=vs.85).aspx
2013年9月30日 星期一
Symbol path for Windows debuggers
一般指定本地端的 symbol 檔路徑的指令如下,
如果電腦有連接網路最有效率的方法就是直接連 Symbol Server,
srv*symbolstore
Microsoft's symbol store:
.sympath srv*http://msdl.microsoft.com/download/symbols
建議加上 Cahce:
.sympath cache*;srv*http://msdl.microsoft.com/download/symbols
cache* 是指把 symbol 檔存到 default 的本地端,下次就不用載一次。
.sympath c:\MySymbols
而 Debugger 查詢 symbol 檔的順序為:- c:\MySymbols\symbols\dll
- c:\MySymbols\dll
- c:\MySymbols
- Current Directory
- Current Directory\dll
如果電腦有連接網路最有效率的方法就是直接連 Symbol Server,
srv*symbolstore
Microsoft's symbol store:
.sympath srv*http://msdl.microsoft.com/download/symbols
建議加上 Cahce:
.sympath cache*;srv*http://msdl.microsoft.com/download/symbols
cache* 是指把 symbol 檔存到 default 的本地端,下次就不用載一次。
2011年12月12日 星期一
WinDbg
微軟提供的 WinDbg 提供了許多除錯的功能,常用的例子如:
當我們想 Trace 哪些程式使用了 Windows 的 SetCursor API,
我們可以先打 x USER32!*setcursor,
x: 查詢 symbol name 的指令
user32: 欲查詢的 Module name
!: 分隔符號
*: 萬用字元
setcursor: 欲查詢的 API
搜尋結果:
777ff34b USER32!ReaderSetCursor = <no type information>
777b3075 USER32!NtUserSetCursor = <no type information>
再設定中斷點:
bp USER32!NtUserSetCursor "k; g"
即可攔截該 API 。
當我們想 Trace 哪些程式使用了 Windows 的 SetCursor API,
我們可以先打 x USER32!*setcursor,
x: 查詢 symbol name 的指令
user32: 欲查詢的 Module name
!: 分隔符號
*: 萬用字元
setcursor: 欲查詢的 API
搜尋結果:
777ff34b USER32!ReaderSetCursor = <no type information>
777b3075 USER32!NtUserSetCursor = <no type information>
再設定中斷點:
bp USER32!NtUserSetCursor "k; g"
即可攔截該 API 。
訂閱:
文章 (Atom)