[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現在

作者: Anytao  來源: 博客園  發布時間: 2008-09-12 14:12  閱讀: 4663 次  推薦: 0   原文鏈接   [收藏]  
 
[1] [你必須知道的.NET] 第十四回:認識IL代碼---從開始到現在
[2] [你必須知道的.NET] 第十四回:認識IL代碼---從開始到現在

系列文章導航:

[你必須知道的.NET] 開篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對抽象編程:接口和抽象類

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關鍵字---把new說透

[你必須知道的.NET] 第六回:深入淺出關鍵字---base和this

[你必須知道的.NET] 第七回:品味類型---從通用類型系統開始

[你必須知道的.NET] 第八回:品味類型---值類型與引用類型(上)-內存有理

[你必須知道的.NET] 第九回:品味類型---值類型與引用類型(中)-規則無邊

[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途

[你必須知道的.NET] 第十一回:參數之惑---傳遞的藝術(上)

[你必須知道的.NET] 第十二回:參數之惑---傳遞的藝術(下)

[你必須知道的.NET] 第十三回:從Hello, world開始認識IL

[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現在

[你必須知道的.NET] 第十五回:繼承本質論

[你必須知道的.NET] 第十六回:深入淺出關鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫和重載

[你必須知道的.NET] 第十八回:對象創建始末(上)

[你必須知道的.NET] 第十九回:對象創建始末(下)

[你必須知道的.NET]第二十回:學習方法論

[你必須知道的.NET]第二十一回:認識全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二

 

  本文將介紹以下內容:

  • IL代碼分析方法

  • IL命令解析

  • .NET學習方法論

  1. 引言

  自從『你必須知道.NET』系列開篇以來,受到大家很多的關注和支持,給予了anytao巨大的鼓勵和動力。俱往昔,我發現很多的園友都把目光和焦點注意在如何理解IL代碼這個問題上。對我來說,這真是個莫大的好消息,因為很明顯我們的思路慢慢的從應用向底層發生著轉變,技巧性的東西是一個方面的積累,底層的探索在我認為也是必不可少的修煉。如果我們選擇了來關注這項修煉,那么我們就應該選擇如何來著手這項修煉,首先關注anytao的『你必須知道的.NET』系列可以給你提供一個捷徑,少花一些功夫;其次對大師級的作品也應有更深入的了解,如《Applied Microsoft .NET Framework Programming》、《.NET本質論》;再次,就是像我一樣從博客園和MSDN的知識庫中不斷的成長。呵呵,除了給自己做了個廣告之外,我認為不管是何種途徑,了解和認識IL代碼,對于我們更深刻的理解.NET和.NET應用之上的本質絕對有不一樣的收獲,這也就是本文研究和分享的理由。

  那么,我們要了解IL代碼,就要知道了解IL的好處,時間對每個程序設計師來說都是寶貴的,你必須清楚自己投資的價值再決定投入的資本。對于.NET程序員來說,IL代碼意味著:

  • 通用的語言基礎是.NET運行的基礎,當我們對程序運行的結果有異議的時候,如何透過本質看表面,需要我們從本質入手來探索,這時IL是你必須知道的基礎;

  • 元數據和IL語言是CLR的基礎,了解必要的中間語言是深入認識CLR的捷徑;

  • 大量的事例分析是以IL來揭密的,因此了解IL是讀懂他人代碼的必備基礎,可以給自己更多收獲。

  很明顯這些優越性足以誘惑我們花時間和精力涉獵其中。然而,了解了IL的好處,并不意味著我們應該過分的來關注IL,有人甚至可以洋洋灑灑的寫一堆IL代碼來實現一個簡單Hello world程序,但是正如我們知道的那樣,程序設計已經走過了幾十年的發展,如果純粹的陶醉在歷史中,除了腦子不好,沒有其他的解釋。不然看見任何代碼都以IL的角度來分析,又將走進另一個誤區,我們的宗旨是追求但不過分。

  因此,有了上述了應該了解的理由和不應該過分的基線,在擺正心態的前提下,本文開始以作者認為的方式來展開對IL代碼的認識,作者期望通過本文的闡述與分析使得大家都能對IL有個概觀之解,并在平時的項目實踐中使用這種方法通過了解自己的代碼來了解.NET。我想,這種方法應該是值得提倡和發揮的最佳實踐,不知你信不信呢?呵呵。

  2. 使用工具

  俗話說,工欲善其事,必先利其器。IL的器主要就是ILadsm.exe和reflector.exe,這兩個工具都是了解IL的基礎,其原理都是通過反射機制來查看IL代碼。

  • ILadsm.exe
  打開.NET Framework SKD 命令提示行,輸入ildasm回車即可打開,如圖所示:

  上圖是我們熟悉的《第十三回:從Hello, world開始認識IL》中的示例,其中的樹形符號代表的意思,可以從MSDN的一張經典幫助示例來解釋,如下圖所示:


  • reflector.exe

  Reflector是Lutz Roeder開發的一個讓人興奮的反編譯利器,目前的版本是Version 5.0.35.0,可以支持.NET3.0,其功能也相當強大,在使用上也較ILDASM更加靈活,如圖所示:

  Reflector可以方便的反編譯為IL、C#、VB、Delphi等多種語言,是深入了解IL的最佳利器。 

  在本文中我們以最簡單的ILadsm.exe為說明工具。

[第1頁][第2頁]
0
0
 
標簽:.NET IL
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()