1. 程式人生 > >ILSpy反編譯工具的使用

ILSpy反編譯工具的使用

ILSpy反編譯工具的使用
本文導讀:ILSpy反編譯工具的使用。不過,ILspy需要在電腦上安裝.NET Framework 4.0。ILspy可以將一個dll檔案轉換為C#或VB語言。ILspy對於單個檔案可以儲存為.cs檔案或.vb檔案,當檔案較多時,可以選擇儲存為專案檔案。C#語句可被ILspy反編譯出來,並可支援yield return語句和 lambdas表示式的反編譯。

檔案結構截圖
ILSpy反編譯工具的使用

ILspy的介面截圖

ILSpy反編譯工具的使用

ILSpy的介面與Reflector相似,左邊以樹型控制元件顯示程式集和它的型別,右邊是對應的原始碼。基礎的反編譯功能,與Reflector相比,絲毫不差,甚至有時候用Reflector無法反編譯(因為加密)的程式集,用ILSpy可以反編譯。

ILspy需要在電腦上安裝.NET Framework 4.0.

ILspy常用的幾個功能

基礎的型別反編譯功能都具備

現在只支援把原始碼反編譯為C#和IL語言,不支援VB。

ILSpy的程式碼儲存功能

當點選一個型別時,選擇File->Save Code會反編譯當前的型別並儲存到指定的檔案中,當選擇程式集時,Save Code儲存為一個專案(csproj)檔案,並且把它所有的型別加到這個專案中。

ILSpy的偵錯程式功能

這裡要說的偵錯程式,不是指Visual Studio的原始碼級別的偵錯程式,而是指程式集的偵錯程式。Reflector有個Addin,可以直接附加在Visual Studio中,除錯第三方的型別庫,而不需要把第三方的型別庫反編譯後,以原始碼的形式新增到專案中。

ILSpy也有這個功能,直接對第三方的程式集進行除錯,有兩種選項

如果第三方型別庫是可執行程式(EXE),可以用Debug an executable來啟動這個程式。

如果第三方型別庫是程式集(DLL),可以用Attach to running application來附加,以啟動程式集的除錯。

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程式碼形式除錯,如下圖所示

ILSpy反編譯工具的使用

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

不過除錯.NET程式集一定需要PDB檔案才可以。然而ILSpy卻沒有產生PDB檔案(no PDB files are generated),而且它不可以除錯ASP.NET Web application和Web 服務。

軟體下載地址:http://down.51cto.com/data/2455152