.Net,Dll掃盲篇,如何在VS中調試已經編譯好的dll?
什麽是Dll?
DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。 例如,在 Windows 操作系統中,Comdlg32 DLL 執行與對話框有關的常見函數。因此,每個程序都可以使用該Dll中包含的功能來實現“打開”對話框。這有助於促進代碼重用和內存的有效使用。
通過使用 DLL,程序可以實現模塊化,由相對獨立的組件組成。
通俗來講,一個項目由多個模塊組成。可以在運行時將各個模塊加載到主程序中(如果安裝了相應模塊)。因為模塊是彼此獨立的,所以程序的加載速度更快,而且模塊只在相應的功能被請求時才加載,而更新的話,就只需替換掉當前的DLL就行了.
如何制作Dll?
在以.net的開發為例,在當前編譯環境下,只需要對當前想要制作成dll的項目右鍵重新生成下,然後在該項目對應的文件夾下面找到debug文件夾,裏面就會有一個與當前項目名稱一樣的後綴為dll的文件。
Dll怎麽用?
首先先在項目中引用該dll,然後在用到dll的地方using一下,即可調用其中的類與方法。因為是dll,所以你F12進去一般都是這樣的:
可以看到該類既不是抽象類也沒有繼承任何接口和類,但是方法體卻沒有實現,而最上面 有寫xx程序集之類。
你可以通過vs的對象瀏覽器看看裏面都是啥結構,但是你是看不到方法裏面的代碼的,也無法調試。
怎麽查看dll的代碼?
你想了解這些dll中的代碼實現,但是你看不到。但是,你想到的,前人早想到了。那麽我們換個說法,之所以你看不到被編譯好的dll中的代碼,那是因為vs編譯器本身不帶這個功能。
那麽,我們找一款工具來輔助我們來看看這個dll中的代碼。
這個實現過程,叫 反編譯。
那麽,自然,我們要用的就是 反編譯軟件。
當下知名的反編譯軟件有 Il spy,.NET Reflector
這兩個軟件我比較喜歡用IL SPY,因為網上有中文版的。
放圖:
如果你想查看特定的dll的話,可以點擊文件選項卡,然後點擊打開,然後找到dll路徑就可以了(.NET Reflector也一樣)。
工具很方便,有很多功能,具體教程,大家自行百度。
怎麽去在vs實際開發項目中調試dll中的代碼?
如果光是看看源碼可不夠,還想在項目中實際調試怎麽辦?那麽我告訴你,只有一個工具可以滿足。
那就是 .NET Reflector的vs插件。
.NET Reflector是個反編譯的軟件,但如果你想即時調試dll的代碼的話,還需再用其vs的插件。
.NET Reflector和.NET Reflector的vs插件是兩個概念,不懂的話請自行百度 什麽是vs插件。
接下來我教大家怎樣安裝並使用這個插件。
首先,點擊工具,點擊擴展和更新
然後點擊 聯機,並在最右側的搜索框中 搜索 Reflector
最後,選中第一個,點擊安裝即可。
目前最新版本9.2
安裝完成,vs中就會多了個選項卡。
給大家介紹下,.NET Reflector Object Browser是 .net反射對象瀏覽器,這個是用來控制.net反射對象瀏覽器 顯示及隱藏的。
.net反射對象瀏覽器長這樣:
這個.net反射對象瀏覽器 你可以瀏覽當前.net框架默認的程序集, 你可以一層一層點開,最終點到你想要看的類裏面。
但是,這樣做只能看到源碼,並不能調試。
還需要在該dll右鍵,點擊選中Enable Debugging,意思就是將該dll啟動到可調試的狀態。當你點擊該選項的時候,這個插件會把這個dll的代碼給轉成本地的文件,.NET Reflector首先會嘗試定位本機上的PDB文件,如果沒有則會自己創建PDB文件,這才能進行調試。
點擊後會出現一個界面,這個界面就是當前狀態改變的過程。
成功後是這樣的:
直接點Done關閉掉就可以。
接下來我們就可以打斷點調試了!
選中斷點,然後按照你喜歡的方式去調試!F5或者附加進程都可以。
為什麽有的代碼無法調試?
有的時候,你即便打了斷點,可發現怎麽也調試不進去。
原因有很多可能,包括條件編譯、編譯器優化結果、目標體系結構等不同,總之,你不能調試。
接下來我要放一張.Net Reflector反編譯的代碼,和一張IL SPY反編譯的代碼。
可以發現,同樣的dll,兩個軟件有著不同的反編譯結果。
兩個反編譯軟件對唯獨對該方法的解密出來的代碼有歧義。
所以,要對編譯與反編譯有個最基礎的概念,並不是很神奇的就能把真正的源碼給你給反編譯出來,而是對編譯的算法進行推測,然後逆推的結果再進行軟件的一些處理來達到100%接近源碼的這樣一個程度。
有反編譯,那麽就有防破解加密。
有些代碼,經過加殼混淆,反編譯出來的東西很尷尬。
那麽,關於對dll加密這方面的東西,大家如果有興趣,可以自行百度了解下。
而關於反編譯,除了il spy,.Net Reflector 還有JetBrains dotPeek、Telerik JustDecompile等等,區別就是算法不同反編譯出來的代碼不同、收費、功能等
我剛演示的.Net Reflector,還有很多功能,這裏只做最簡單的入門教程,有興趣請自行了解, 這是人家的網站,http://www.red-gate.com/products/dotnet-development/reflector/
作者:小曾
出處:http://www.cnblogs.com/1996V/p/7396913.html 歡迎轉載,但任何轉載必須保留完整文章,在顯要地方顯示署名以及原文鏈接。如您有任何疑問或者授權方面的協商,請給我留言
.Net,Dll掃盲篇,如何在VS中調試已經編譯好的dll?