.Net,Dll掃盲篇,如何在VS中調試已經編譯好的dll?

來源:互聯網
上載者:User

標籤:結果   保留   建立   載入速度   主程   授權   包括   搜尋   意思   

什麼是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?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.