.net程序反編譯工具(ILSpy)

ILSpy是SharpDevelop小組的反編譯工具,ILSPY這個開源工具的目的就是代替reflector的,它能夠反編譯出比reflector更好的C#代碼。html

 NET Reflector 2011 2月已經結束提供免費版本,催生了另外一個開源的項目ILSpy。app

ILSpy須要.NET Framework 4.0支持。框架

ILSpy與Reflector的比較:

ILSpy的界面與Reflector類似,左邊以樹型控件顯示程序集和它的類型,右邊是對應的源代碼。基礎的反編譯功能,與Reflector相比,絲絕不差,甚至有時候用Reflector沒法反編譯(由於加密)的程序集,用ILSpy能夠反編譯。 工具

Decompiler 反編譯器學習

基礎的類型反編譯功能都具有,如今只支持把源代碼反編譯爲C#和IL語言,不支持VB。優化

.net程序反編譯工具(ILSpy)

當須要找的程序集是.NET框架時,能夠直接從菜單File—Open from GAC中打開須要查看源碼的程序集。加密

.net程序反編譯工具(ILSpy).1

代碼保存功能也作得不錯,當點擊一個類型時,選擇File->Save Code會反編譯當前的類型並保存到指定的文件中,當選擇程序集時,Save Code保存爲一個項目(csproj)文件,而且把它全部的類型加到這個項目中。spa

Debugger 調試器.net

這裏要說的調試器,不是指Visual Studio的源碼級別的調試器,而是指程序集的調試器。Reflector有個Addin,能夠直接附加在Visual Studio中,調試第三方的類型庫,而不須要把第三方的類型庫反編譯後,以源碼的形式添加到項目中。插件

ILSpy也有這個功能,直接對第三方的程序集進行調試,有兩種選項

若是第三方類型庫是可執行程序(EXE),能夠用Debug an executable來啓動這個程序。

若是第三方類型庫是程序集(DLL),能夠用Attach to running application來附加,以啓動程序集的調試。

.net程序反編譯工具(ILSpy).2

從上面兩張圖中已經能夠看出它的用法,和調試源代碼同樣。在須要監視變量值的方法的地方,設置斷點,當程序運行到此時,就能夠經過監視窗體來觀察變量的值。從ILSpy的狀態欄中看出,上面的第一張圖是正處於調試狀態,第二張圖,是準備就緒,能夠進行調試。

這二者的區別是,Attach to a running application調試時,若是代碼通過編譯器優化,則監視器會沒法獲得它的值。

如圖所示,沒法顯示正在調試的變量num的值,由於代碼已經通過優化。官方推薦的方式是Debug an executable

與在Visual Studio中調試.NET源代碼同樣,你能夠Step into,Step over,continue,同時狀態欄會顯示就緒(stand by),運行中(running),正在調試(debugging)。

除了調試程序集的C#/VB形式的代碼以外,也能夠以IL代碼形式調試,以下圖所示

由此看來,這仍是至關不錯的調試IL代碼的工具。工具能夠促進學習的效果,學習領悟以後,又能夠推動工具的發展,這就是知識的無止境的發展。

ILSpy的debugger是以插件形式存在的,請確保包含ILSpy.Debugger的Plugin。

根據咱們的理解,調試.NET程序集必定須要PDB文件才能夠。然而ILSpy卻沒有產生PDB文件(no PDB files are generated),並且它不能夠調試ASP.NET Web application和Web 服務。 

相關文章
相關標籤/搜索