系列文章之二: Make Best Use of Our Tools 工欲善其事,必先利其器。這一節我談的就是我們用于研究 IL 的工具。 第一" name="description" />
ILMILY: 宋體; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列文章之二:
Make Best Use of Our Tools
工欲善其事,必先利其器。這一節我談的就是我們用于研究IL的工具。
第一篇文章貼出來之后,網上有朋友問我“能不能看到c#程序的IL代碼?”??磥磉€有些朋友對IL的編譯與反編譯還不太熟悉,所以我個人認為寫一篇關于工具的文章還是有必要的。我們的工具主要有三個,第一個是dumpbin,可以把exe,obj,dll等bump出來然我們它們的PE結構,關于PE結構的討論前一段時間比較熱,網絡上雜志上都有很多資料。(如果你先麻煩懶得去找的話,那你就等著什么時候我也來寫一篇吧J)。另外兩個是ilasm和ildasm,上次的文章中我們已經提到過了,分別是IL的編譯器和反編譯器。dumpbin, ilasm的說明已經比較詳細了。你可以啟動Visual Studio .NET命令提示,鍵入“dumpbin /?”,“ilasm /?”或“ildasm /?”,Enter,就可以看到在三個應用程序的命令行幫助了。更為詳細的MSDN資料如下:
dumpbin:ms-help://MS.VSCC/MS.MSDNVS.2052/vccore/html/_core_dumpbin_reference.htm
ilasm:ms-help://MS.VSCC/MS.MSDNVS.2052/cptools/html/cpconmsilassemblerilasmexe.htm
ildasm:ms-help://MS.VSCC/MS.MSDNVS.2052/cptools/html/cpconmsildisassemblerildasmexe.htm
(不過你要安裝了Visual Studio.NET整合的MSDN才能看到。)
這些我都不想再說了,自己去看吧。我下面要講的是一個不太容易被人們發現的東西——ildasm的高級選項。
你在Visual Studio .NET命令提示下輸入“ildasm /?”看看有什么東西,然后在輸入“ildasm /ADV /?”再看看多了什么東西(ADV就是Advanced的意思)。我們第一個輸入下是看不到ADV選項的,在第二個輸入下我們看到了多出了幾個高級選項。這些高級選項對于那些以.net平臺為目標的工具開發者很有益處。
可供選擇的命令行高級參數如下:
/ADV 以高級方式啟動ildasm,在你啟動ildasm后“視圖”菜單中會出現一些高級選項。如果你是想使用命令行的方式進行反編譯的話,“/ADV”必須寫在其它選項前面前面,如“/ADV /CLASSLIST”等。
/STATS 顯示鏡像文件(你就把它理解為被你反編譯的文件好了)的統計信息。
/CLASSLIST 包括本模塊中定義的類的列表。
/ALL 包括 /HEADER, /BYTES, /STATS, /CLASSLIST, /TOKENS。
/METADATA[=<specifier>] 顯示<specifier>所指定的MetaData,<specifier>包括:
MDHEADER 顯示MetaData header包含的信息和大小。
HEX 顯示更多十六進制表示的內容。
CSV 以逗號分隔的形式顯示header的大小。(這里我沒搞太懂L。)
UNREX 顯示無法分析的外部對象。
VALIDATE 對metadata的一致性進行驗證。(對于metadata我以后會有文章介紹。)
OK!差不多了,就先寫到這里吧。
原文轉自:http://www.anti-gravitydesign.com