透過IL看C 開篇

2021-09-07 22:20:31 字數 1244 閱讀 7276

老劉是.net技術實打實的擁躉。但追逐.net技術這麼多年來,很累。計算機技術,尤其是微軟技術,瞬息萬變,欲逐之而力不足,於是老劉決定往底層走一走。

如果對.net技術有一定的了解,就會發現自.net 2.0以來,儘管framework和語言以及其他應用層領域(如wf、wcf、wpf和silverlight等)技術日新月異,但其底層——用什麼詞表示好呢?姑且以il蔽之吧——卻是非常穩定的,基本沒什麼變化。

最近推出的visual studio 2010 ctp更加體現了這一點,儘管c#語言發生了巨大的變化(提供了更強的與動態語言互動的能力)、framework也要有巨大的更新,但依然沒聽說要對il做什麼改動。所以,學習il可能要比學習那些應用層技術更加輕鬆一些,雖然難度會更大,但我可以慢慢地學,細細地品味。

老劉不是吃獨食的人,既然學習,就要和大家分享。老劉不僅分享學到的東西,還希望和大家分享學習的過程,這其中的酸甜苦辣。

本來打算寫一些類似於il教程的東西,但最終放棄了。在今年的mvp open day上,和anytao還有terrylee聊起了這個想法,我們一致認為這樣的文章沒有什麼意義。是啊,有那麼方便的開發工具、那麼強大的語言,誰會去用il寫程式呢?更多的人是去看il,通過il深入理解一些更高層的技術和概念。

最終anytao建議道,可以寫一些c#語言結構所對應的il。這個小建議給老劉帶來了無限靈感,也誘發了這個系列的形成。在此小感謝一下!

透過il看c#,這個il是什麼呢?簡單來說,就是ilasm語言。

那麼ilasm語言又是什麼呢?如果你簡單地認為這是一門組合語言或程式語言,那就大錯特錯了。可以認為ilasm是「.net元資料對映語言」,也就是說,ilasm披著程式語言的外衣,幾乎映**乙個託管程式集中所有的內容——包括程式集清單、元資料、il指令甚至託管資源,乃至pe映像的種種屬性。

這一系列文章,就是簡單地羅列了各種c#文法結構對應的il**。

老劉寫這個系列,純粹就是憑興趣。如果你和老劉情緒相投,那麼這些小文對你來說再合適不過了。

如果你打算寫個類似於.net reflector那樣的反編譯器,那麼除了對反射和il語言相當熟悉之外,一定要深入了解各種c#文法構造所對應的il指令序列模式。這種對應關係只能**於大量的觀察和積累。有的時候,同樣的文法結構,只是因為上下文的些許變化,就會生成截然不同的il指令序列。這系列文章雖然不能涉及所有這些對應關係,但相信能給你帶來一些靈感。

注,老劉寫作一向是走意識流,第一篇寫下了第二篇不知道啥時候能出來,也不知道寫幾篇就另尋他歡了。所以,千萬不要特別期待。

在這借用韓寒一句話——你可以罵我,也可以不看,但別催我。

透過表象看本質!?

做了這麼多年學生,一直不知道該如何搞科研。直到有一天,我在興致勃勃的調 調整著引數,看著結果。就在這時,導師也蠻有興致的走過看,並發問,這結果說明了什麼?為什麼不能?那什麼方法能?這些方法有什麼異同?導師連珠炮式問了下去。留下傻傻的我在一邊,我還沒調研過。那就去調研一下,只是這樣的看是不能幫你解決你...

透過表象看本質

前段時間,好友王胖子問了熊熊乙個問題,他們的 oracle 資料庫,有個主要的表空間設定的自動增長,每次增長 100m 卻無法滿足業務需求,問了一下 oracle 方面,說是自動增長的步長太小了,於是胖子在資料庫裡查詢了一下,有了以下的問題 胖子 熊,在麼,問個問題?熊熊 啥問題 胖子 看看,我這個...

透過現象看本質

例子 你回家的時候,發現沒帶鑰匙,你聯絡了乙個鎖匠來開鎖,結果他很快來了,並且在一分鐘之內給你開啟了鎖,問你要1000元,你會覺得很不值 但是如果乙個鎖匠用了幾個小時或者更長時間幫你開啟了鎖,你會看到他的努力,要同樣的錢,你會覺得很合理 這實際上是乙個誤區,人往往會看到一些表面的努力,而忽略了一些隱...