MSIL反汇编程序(Ildasm.exe)使用详解
选项说明
/objectfile=filename
显示指定库中单个对象文件的元数据。
.NET Framework 2.0 版的新增功能。
注意
Ildasm.exe 的所有选项不区分大小写,并且由前三个字母识别。例如,/quo 等效于 /quoteallnames。指定参数的选项既可以用冒号 (:) 也可以用等号 (=) 作为选项和参数之间的分隔符。例如,/output:filename 等效于 /output=filename。
备注
Ildasm.exe 只对磁盘上的 PE 文件进行操作。它不对安装在全局程序集缓存中的文件进行操作。
Ildasm.exe 生成的文本文件可以用作 MSIL 汇编程序 (Ilasm.exe) 的输入。这很有用,例如当编译用并非支持所有运行库元数据属性的编程语言编写的代码时。通过 Ildasm.exe 编译该代码并运行输出后,可以手动编辑结果 MSIL 文本文件以添加缺少的属性。然后可以通过 MSIL 汇编程序运行此文本文件以生成最终的可执行文件。
注意
目前,无法对包含嵌入的本机代码的 PE 文件(例如,由 Visual C++ 生成的 PE 文件)使用此技术。
可以使用 MSIL 反汇编程序中的默认 GUI,在分层树视图中查看任何现有 PE 文件的元数据和反汇编代码。若要使用此 GUI,请在命令行中键入 ildasm,无需提供 PEfilename 参数或任何选项。从“文件”菜单中可以定位到希望加载到 Ildasm.exe 中的 PE 文件。若要保存为选定的 PE 显示的元数据和反汇编代码,请在“文件”菜单中选择“转储”命令。若要只保存分层树视图,请在“文件”中选择“转储树视图”命令。有关将文件加载到 Ildasm.exe 中和解释输出的详细指南,请参见 Ildasm.exe 教程,该教程位于 .NET Framework SDK 附带的 Samples 文件夹中。
如果用包含嵌入资源的 PEfilename 参数提供 Ildasm.exe,则此工具生成多个输出文件:一个包含 MSIL 代码的文本文件,而每个嵌入的托管资源都有一个用该资源在元数据中的名称生成的 .resources 文件。如果 PEfilename中有嵌入的非托管资源,则用 /output 选项为 MSIL 输出指定的文件名生成 .res 文件。
注意
Ildasm.exe 只显示 .obj 和 .lib 输入文件的元数据说明。不反汇编这些文件类型的 MSIL 代码。
可以对 .exe 或 .dll 文件运行 Ildasm.exe 来确定该文件是否是托管的。如果该文件不是托管的,则此工具将显示一条信息,说明该文件不包含有效的公共语言运行库头,并且无法反汇编。如果该文件是托管的,则此工具将成功运行。
使用示例
下面的命令使 PE 文件 MyHello.exe 的元数据和反汇编代码显示在 Ildasm.exe 的默认 GUI 中。
ildasm myHello.exe
下面的命令对 MyFile.exe 文件进行反汇编,并将结果 MSIL 汇编程序文本存储在 MyFile.il 文件中。
ildasm MyFile.exe /output:MyFile.il
下面的命令对 MyFile.exe 文件进行反汇编,并将结果 MSIL 汇编程序文本显示到控制台窗口中。
ildasm MyFile.exe /text
如果文件 MyApp.exe 包含嵌入的托管和非托管资源,则下面的命令将产生以下 4 个文件:MyApp.il、MyApp.res、Icons.resources, 和 Message.resources:
ildasm MyApp.exe /output:MyApp.il
下面的命令对 MyFile.exe 的 MyClass 类中的 MyMethod 方法进行反汇编,并将输出显示到控制台窗口中。
ildasm /item:MyClass::MyMethod MyFile.exe /text
在上面的示例中,可能有几个具有不同签名的 MyMethod 方法。下面的命令对返回类型为 void 且带有参数 int32 和 System.String 的 MyMethod 方法进行反汇编。
ildasm /item:"MyClass::MyMethod(void(int32,class System.String))" MyFile.exe /text