.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框架默認的程序集,  你能夠一層一層點開,最終點到你想要看的類裏面。

可是,這樣作只能看到源碼,並不能調試。html

還須要在該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交流羣, QQ羣:166843154 慾望與掙扎 
相關文章
相關標籤/搜索