轉載地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662546.html 一:Ildasm.exe簡介 這一微軟VS自帶工具,在上一篇博文《初識Ildasm.exe——IL反編譯的實用工具》中已經做了詳細介紹,這裡不再鰲述; 二
轉載地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662546.html
一:Ildasm.exe簡介
這一微軟VS自帶工具,在上一篇博文《初識Ildasm.exe——IL反編譯的實用工具》中已經做了詳細介紹,這裡不再鰲述;
二:Reflector.exe簡介
至此(10.02.03),從 http://www.aisto.com/roeder/dotnet 下載的最新版本為Latest version: 5.1.6.0 ,這裡還以上篇中經典的"Hello World."示例演示,當用Reflector.ext打開可執行文件時,主界面如下:
可見Reflect.exe的功能要強於Ildasm.exe,它可以反編譯IL、C#、Visual Basic、Delphi、MC++、甚至是Chrome,而且它的界面更加友好,所以他被冠稱為深入IL的最佳利器!
我們先看它所反編譯的IL代碼是何模樣?是否同於Ildasm.exe的效果?圖示如下:
比較之後,可得Reflector.exe具有更容易理解的界面(沒有Ildasm.exe中眾多的標識符,見上篇博文的MSDN幫助圖) 。
當然,之所以稱 Reflector.exe為深入IL的最佳利器,是因為它可以反編譯IL語言,以及C#語言!這樣我們:可以在完全沒有源代碼的情況下研究所使用的程式集!!!示例圖見上上圖,所示,我們發現果然編譯為了源代碼,且完全正確,這太令人驚訝了,而它的作用必定是意義深遠的!
用IL揭示介面的本質:
一:介面本質
我們先看一個普通的介面定義:如圖示:
而用Reflector.exe反編譯的IL代碼為:
可見介面實質上 ,被編譯為抽象類,其中介面中的方法,被編譯為抽象方法(abstract virtual),沒有實現體。
二:介面的抽象實現原理
先來看最基本的類繼承介面的示例,如下圖:
而其對應的IL代碼,用Reflector.exe編譯為:
這樣可以看到該類中,對應介面的函數,在這裡實現了"覆蓋"——Override!因此介面的抽象機制,採用多態來實現的!
綜述之,通過對Reflect.exe的實例應用,瞭解了更多的IL反編譯工具。同時通過IL代碼,實現了對介面本質的揭示,認識到其在保持介面特有性(這裡不鋪開論述。)的基礎上, 用抽象類的實現機制及其多態性實現抽象的。