Reflector

Reflector

Reflector是由微軟員工Lutz Roeder編寫的免費程序。Reflector的出現使·NET程序員眼前豁然開朗,因為這個免費工具可以將·NET程序集中的中間語言反編譯成C#或者Visual Basic代碼。除了能將IL轉換為C#或Visual Basic以外,Reflector還能夠提供程序集中類及其成員的概要信息、提供查看程序集中IL的能力以及提供對第三方插件的支持。

誕生


程序集,作為.NET時代的動態鏈接庫,蘊藏了太多的軟體秘密。為此,Visual Studio內置的ILDASM成為最初挖掘程序集的上佳工具。但自從Reflector出現后,ILDASM相形見絀。因為,Reflector能提供更多的程序集信息,而且是免費的工具。
如今,在Visual studio中編譯源代碼(無論是VB還是C#)時,編譯器都會將高級源代碼翻譯成MSIL,即“微軟中間語言”,而不是特定的機器指令。具有更多安全性、版本控制、共享能力與其它相關元數據的中間語言(IL),是包在一個或多個DLL或可執行文件中的。
基於ILDASM檢查程序集中的IL有時很有用,但它要求我們熟悉MSIL。通常,比起IL,大多數開發人員對像C#或Visual Basic這樣的高級程序設計語言更為熟悉。

下載與運行


這個軟體經常更新,可以在本詞條提供的擴展閱讀提供的鏈接中下載最新的版本。默認情況下,Reflector會打開一組公共程序集(mscorlib、System、System.Data、System.Drawing等等)。每個打開的程序集都列在Reflector的主窗口中。單擊程序集旁邊的+圖標可以展開樹結構並展示程序集的命名空間。每個命名空間旁邊都有一個相關的+圖標,單擊這個圖標將顯示這個命名空間內的類。除此以外,還可以展開每個類,顯示類的成員:事件、欄位、方法與屬性。
要想查看其它程序集(包括我們自己創建的程序集)的細節,你可以使用菜單命令“File→Open”。然後,瀏覽到想要查看的程序集。只要選擇了有效的.NET程序集,這個程序集就可以在Reflector的主窗口中與其它默認程序集共同顯示。要想從Reflector的主窗口中刪除程序集,只需右擊程序集並選擇“Close”。提供基本的程序集是Reflector唾手可得的功能,然而,Reflector真正的威力體現在它的反彙編能力。只要瀏覽到類級的成員,就可以通過Tools菜單中的Disassembler項(或在該項上單擊右鍵)反彙編此成員。這將打開第二個窗格,以C#、Visual Basic、Delphi或者IL顯示反彙編后的內容。有了Reflector的反編譯功能,要研究.NET框架基類庫就容易多了。我們完全可以在沒有源代碼的情況下研究我們所創建或者正在使用的程序集相應源代碼。
不用太擔心,自己的.NET應用程序還有其它受保護措施。但是,想阻止別人查看.NET程序集的IL(繼而反編譯成C#或者Visual Basic)是不可能的,但你可以使用“混淆”技術使IL變得混亂。目前,市場上有許多.NET混淆產品,比如:PreEmptive Solution的Dotfuscator、WiseOwl的Dmeanor以及Remotesoft的.NET Obfuscator等。

其他功能


除了作為對象瀏覽器與反彙編器之外,Reflector還可以顯示類與其成員的調用與被調用圖、提供單鍵訪問Google或MSDN搜索的能力並提供了允許第三方開發人員為Reflector創建插件的框架。
要查看調用或被調用圖,只需要在樹視圖中選擇一個成員,訪問Tools菜單,選擇Call Graph或Callee Graph選項即可。Call Graph會列出所選項所調用的成員,而Callee Graph列出調用所選項的成員。
通過使用插件,Reflector的功能可以得到進一步擴展。目前有能顯示程序集依賴圖、自動載入當前運行中的程序集、輸出整個程序集的反彙編內容以及在Visual Studio中作為Reflector的宿主等的插件。還有更多插件都列本詞條擴展閱讀中。在此,我極力推薦有興趣的讀者前去一看。
不出乎所料,的確存在一個Reflector.VisualStudio插件。有了這個插件,就可以讓Reflector集成在Visual Studio環境中,進而取代以前那個有些“拙漏”的對象瀏覽器。
首先,我們需要在機器上準備Reflector的最新版,然後下載最新版本的Reflector.VisualStudio插件。據說安裝了此插件之後,Reflector能夠與Visual Studio完美融合。但遺憾的是,有人試下載此軟體並安裝(僅能得到testdriven-2.8.2130 RTM個人測試版本,時間7/30/2007,大小3.3M)后,沒有大發現—僅是在VS2005中添加“Go to Reflector”和一個幫助菜單項。點擊“Go to Reflector”菜單項僅是從VS2005內部啟動Reflector而已。
Reflector最新版本收費
現在打開Reflector的老版本要求強制更新到最新版本,最新版本收費。現在網上很少有破解版本了。2008年被redgate軟體公司收購。Reflector已經得到增強,截止2011年初,該工具現在可以分為三個版本(Standard 、VS、VSPro)。用戶可以根據自己的需求和實力進行購買。