IL 系列文章之二:
** 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[=
1<specifier>] 显示 <specifier> 所指定的 MetaData , <specifier> 包括:
2
3MDHEADER 显示 MetaData header 包含的信息和大小。
4
5HEX 显示更多十六进制表示的内容。
6
7CSV 以逗号分隔的形式显示 header 的大小。(这里我没搞太懂 L 。)
8
9UNREX 显示无法分析的外部对象。
10
11VALIDATE 对 metadata 的一致性进行验证。(对于 metadata 我以后会有文章介绍。)
12
13OK !差不多了,就先写到这里吧。</specifier></specifier></specifier>