給大家介紹個(gè)一款神器:ILSpy
C#dll反編譯的過(guò)程還是很簡(jiǎn)單的??唇缑?/span>
下面廢話(huà)較多,為節省時(shí)間,下面只用看下我標注底色的就好:
ILSPY源碼:
https://github.com/icsharpcode/ILSpy#ilspy-------
NET Reflector 2011 2月已經(jīng)結束提供免費版本,催生了另一個(gè)開(kāi)源的項目ILSpy。
ILSpy需要.NET Framework 4.0支持。
ILSpy的界面與Reflector相似,左邊以樹(shù)型控件顯示程序集和它的類(lèi)型,右邊是對應的源代碼?;A的反編譯功能,與Reflector相比,絲毫不差,甚至有時(shí)候用Reflector無(wú)法反編譯(因為加密)的程序集,用ILSpy可以反編譯。
Decompiler 反編譯器
基礎的類(lèi)型反編譯功能都具備,現在只支持把源代碼反編譯為C#和IL語(yǔ)言,不支持VB。
當需要找的程序集是.NET框架時(shí),可以直接從菜單File—Open from GAC中打開(kāi)需要查看源碼的程序集。
代碼保存功能也做得不錯,當點(diǎn)擊一個(gè)類(lèi)型時(shí),選擇File->Save Code會(huì )反編譯當前的類(lèi)型并保存到指定的文件中,當選擇程序集時(shí),Save Code保存為一個(gè)項目(csproj)文件,并且把它所有的類(lèi)型加到這個(gè)項目中。
Debugger 調試器
這里要說(shuō)的調試器,不是指Visual Studio的源碼級別的調試器,而是指程序集的調試器。Reflector有個(gè)Addin,可以直接附加在Visual Studio中,調試第三方的類(lèi)型庫,而不需要把第三方的類(lèi)型庫反編譯后,以源碼的形式添加到項目中。
ILSpy也有這個(gè)功能,直接對第三方的程序集進(jìn)行調試,有兩種選項
如果第三方類(lèi)型庫是可執行程序(EXE),可以用Debug an executable來(lái)啟動(dòng)這個(gè)程序。
如果第三方類(lèi)型庫是程序集(DLL),可以用Attach to running application來(lái)附加,以啟動(dòng)程序集的調試。
從上面兩張圖中已經(jīng)可以看出它的用法,和調試源代碼一樣。在需要監視變量值的方法的地方,設置斷點(diǎn),當程序運行到此時(shí),就可以通過(guò)監視窗體來(lái)觀(guān)察變量的值。從ILSpy的狀態(tài)欄中看出,上面的第一張圖是正處于調試狀態(tài),第二張圖,是準備就緒,可以進(jìn)行調試。
這兩者的區別是,Attach to a running application調試時(shí),如果代碼經(jīng)過(guò)編譯器優(yōu)化,則監視器會(huì )無(wú)法得到它的值。
如圖所示,無(wú)法顯示正在調試的變量num的值,因為代碼已經(jīng)經(jīng)過(guò)優(yōu)化。官方推薦的方式是Debug an executable
與在Visual Studio中調試.NET源代碼一樣,你可以Step into,Step over,continue,同時(shí)狀態(tài)欄會(huì )顯示就緒(stand by),運行中(running),正在調試(debugging)。

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

由此看來(lái),這還是相當不錯的調試IL代碼的工具。工具可以促進(jìn)學(xué)習的效果,學(xué)習領(lǐng)悟之后,又可以推進(jìn)工具的發(fā)展,這就是知識的無(wú)止境的發(fā)展。
ILSpy的debugger是以插件形式存在的,請確保包含ILSpy.Debugger的Plugin。

根據我們的理解,調試.NET程序集一定需要PDB文件才可以。然而ILSpy卻沒(méi)有產(chǎn)生PDB文件(no PDB files are generated),而且它不可以調試ASP.NET Web application和Web 服務(wù)。
反編譯完成后
接下來(lái)就好辦了:
1、直接 Ctrl+S保存為CS文件的代碼。
2、根據類(lèi)的命名空間建立相應的文件夾目錄
3、根據其中引用建立相應的項目。
4、根據VS的錯誤提示,引用相應的程序集或文件,最后生成成功。
是不是很酸爽 ?。?!
聯(lián)系客服