ILdasm 的使用

ILdasm 的使用

软中间语言 (MSIL) 是一种语言,是许多编译器(C#、VB.NET等)的输出。ILDasm (中间语言反汇编器)程序和.Net Framework SDK(FrameworkSDK\Bin\ildasm.exe)打包在一起,让用户以人可阅读的格式查看MSIL代码。通过该工具,我们可以打开任何.net可执行文件(exe或dll)并查看其MSIL代码。下边我们来看看怎么使用:

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。



ildasm.exe的初步使用

使用前提条件:

1. 安装vs 2008,vs2005,vs2003中的任意一个,并且安装其工具包

2. 运行 VS tools中的 command 命令行

3. 将ildasm.exe copy 到 $root:\Program Files\Microsoft Visual Studio 9.0\SDK\v3.5\Bin 目录下面(如果安装的。net framework 版本不同,可能安装的目录也不同)

4. 在command 命令窗口 cd 到 对应的目录文件夹下面

5. 查找需要修改的对地方 可以参考 http://m.cnblogs.com/10494/1241375.html

反编译 和编译步骤:

1. 反编译命令  ildasm /out=test.il /source=d:"\relload\test.dll   //分解dll时,可以使用 ildasm。exe 直接分解,也可以使用cmd 命令行执行

2. 编译成dll 命令  ilasm /dll /output=d:\test.dll  test.il     //此命令必须在 tools的command 命令行下执行,并且cd 到.il文件对应的目录下面

强命名问题:

 有时候你会需要一个DLL是强命名的,比如你想把这个文件放到GAC里面。如果这是一个第三方的DLL,你没有源代码,这会是一件比较麻烦的事情。有一个方法可以解决这个问题。

在VS.NET的命名行窗口下,输入如下的代码。

1 ,生成一个KeyFile

sn -k keyPair.snk

2, 得到程序集的MSIL

ildasm SomeAssembly.dll /out:SomeAssembly.il

3 ,为了避免冲突,把原来的DLL文件改名

ren SomeAssembly.dll SomeAssembly.dll.orig

4 , 使用导出的MSIL和刚创建的KeyFile生成一个新的的DLL文件。

ilasm SomeAssembly.il /dll /key= keyPair.snk



猜你喜欢

转载自blog.csdn.net/ljsql/article/details/7863862
今日推荐