Ildasm.exe下载地址:https://www.jb51.net/softs/73291.html
下边我们来看看怎么使用:
1.在VS2008中新建一个Windows窗体应用程序,输入如下代码后生成解决方案:
复制代码代码如下:
private void Form1_Load(object sender, EventArgs e)
{
int i = 0;
i = i++;
MessageBox.Show(i.ToString());
}
2.运行ildasm,打开刚生成的exe文件,可以看到如下内容:
3.在ildasm中双击"Form1_Load: void(object,class [mscorlib]System.EventArgs)"即可看到上边代码的MSIL代码:
复制代码代码如下:
.method private hidebysig instance void Form1_Load(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// 代码大小 22 (0x16)
.maxstack 3
.locals init ([0] int32 i)
IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: dup
IL_0004: ldc.i4.1
IL_0005: add
IL_0006: stloc.0
IL_0007: stloc.0
IL_0008: ldloca.s i
IL_000a: call instance string [mscorlib]System.Int32::ToString()
IL_000f: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
IL_0014: pop
IL_0015: ret
} // end of method Form1::Form1_Load
附:将ildasm集成到VS2008中的方法:
在VS2008菜单中选择"工具→外部工具",点击添加按钮,在标题中输入ILdasm,命令中输入C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe,确定后在工具菜单中就能找到ILdasm了,以后只要选择它就能运行ILdasm。
MSIL汇编程序(Ilasm.exe)和MSIL反汇编程序(Ildasm.exe)
先来解释下文要提到的几个名词:
PE文件:可移植可执行文件。当为公共语言运行库编译程序时,该程序转换为由三部分组成的 PE 文件,PE 标头、MSIL 指令、元数据。
MSIL: Microsoft 中间语言。这是一组可以有效地转换为本机代码且独立于 CPU 的指令。MSIL 包括用于加载、存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他 *** 作的指令。
MSIL 反汇编程序是 MSIL 汇编程序 (Ilasm.exe) 的伙伴工具。Ildasm.exe 采用包含 Microsoft 中间语言 (MSIL) 代码的可移植可执行 (PE) 文件,并创建相应的文本文件作为 Ilasm.exe 的输入。
还是以SampleClass为例来解释它们的用法。
MSIL反汇编程序(Ildasm.exe)
下面的命令使 PE 文件 SampleClass.exe 的元数据和反汇编代码显示在 Ildasm.exe 的默认 GUI 中。
ildasm SampleClass.exe
下面的命令对 SampleClass.exe 文件进行反汇编,并将结果 MSIL 汇编程程序文本存储在 SampleClass.il 文件中。
E:\test>ildasm SampleClass.exe /output:SampleClass.il
// WARNING: Created Win32 resource file SampleClass.res
下面的命令对 SampleClass.exe 文件进行反汇编,并将结果 MSIL 汇编程序文本显示到控制台窗口中。
E:\test>ildasm SampleClass.exe /text
如果文件 SampleClass.exe 包含嵌入的托管和非托管资源,则下面的命令将产生以下 4 个文件:SampleClass.il、SampleClass.res、Icons.resources 和 Message.resources:
ildasm SampleClass.exe /output:SampleClass.il
下面的命令对 SampleClass.exe 的 SampleClass 类中的 DataClass 方法进行反汇编,并将输出显示到控制台窗口中。
ildasm /item:SampleClass::DataClass SampleClass.exe /text
参数列表:
下列选项可用于 .exe、.dll、.obj 和 .lib 文件。
下列附加选项可用于 .exe 和 .dll 文件。
下列选项仅对用于文件或控制台输出的 .exe 和 .dll 文件有效。
下列选项仅对用于文件或控制台输出的 .exe、.dll、.obj 和 .lib 文件有效。
- 反汇编指定的 class。
- 反汇编 class 的指定 method。
- 反汇编具有指定签名 sig 的 class 的 method。指定具有返回类型的签名和所需的任意多个参数。例如,returntype (param1, param2,..paramn)。
MSIL汇编程序(Ilasm.exe)
下面的命令对 MSIL 文件 SampleClass.il 进行汇编并产生可执行文件 SampleClass.exe。
E:\test>ilasm SampleClass
Microsoft (R) .NET Framework IL Assembler. Version 1.1.4322.2032
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Assembling 'SampleClass.IL' , no listing file, to EXE --> 'SampleClass.EX
Source file is ANSI
Assembled method DataClass::.ctor
Assembled method DataClass::addem
Assembled method SampleClass::.ctor
Assembled method SampleClass::Main
Creating PE file
Emitting members:
Global
Class 1 Fields: 2; Methods: 2;
Class 2 Fields: 2; Methods: 2;
Resolving member refs: 11 -> 11 defs, 0 refs
Writing PE file
Operation completed successfully
下面的命令对 MSIL 文件 SampleClass.il 进行汇编并产生 .dll 文件 SampleClass.dll。
E:\test>ilasm SampleClass /dll
Microsoft (R) .NET Framework IL Assembler. Version 1.1.4322.2032
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Assembling 'SampleClass.IL' , no listing file, to DLL --> 'SampleClass.DLL'
Source file is ANSI
Assembled method DataClass::.ctor
Assembled method DataClass::addem
Assembled method SampleClass::.ctor
Assembled method SampleClass::Main
Creating PE file
Emitting members:
Global
Class 1 Fields: 2; Methods: 2;
Class 2 Fields: 2; Methods: 2;
Resolving member refs: 11 -> 11 defs, 0 refs
Writing PE file
Operation completed successfully
下面的命令对 MSIL 文件 SampleClass.il 进行汇编并产生 .dll 文件 SampleClass.dll。
ilasm SampleClass /dll /output:newSampleClass.dll
参数列表:
分析
发出 MD 发出元数据。 定义引用解析 解析对文件中的定义的引用。修正和链接
CEE 文件生成 在内存中生成文件映像。 PE 文件写入 将映像写入 PE 文件。注意 指定 /output:myfile.dll 并不会设置 /dll 选项。如果不指定 /dll,则会生成名为 myfile.dll 的可执行文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)