ILDASM和ILASM,如何使用?

时间:2018-08-26 05:08:31

标签: c# disassembly cil ildasm ilasm

我在尝试使用Visual Studio命令提示符(反汇编)dll时遇到了麻烦,就像我看到的in the microsoft page一样,看起来并不简单。

我通过以下方式使用ildasm:

ildasm myLibrary.dll output:MyLibrary.il

我得到:无法打开“ MyLibrary.il”进行输出。

我也尝试了完整路径:

ildasm directory\myLibrary.dll output:directory\MyLibrary.il

然后我得到:指定了多个输入文件

使用ildasm GUI实际上可以,但是当我使用ilasm时:

ilasm myLibrary.il /dll

我得到:当我使用完整路径时,我无法打开'myLibrary.il'

这是怎么了?

1 个答案:

答案 0 :(得分:2)

简单,让我们看一下这行代码:

using System;      
public class sample  
{
    static void Main(string[] args)
    {
        Console.WriteLine("Inside main ...");
    }
}

让我们将App.cs编译为App.exe。现在,运行该可执行文件时,它会在内部main上打印。

现在,让我们尝试更改此可执行文件的输出,而无需触摸其源文件。

您运行ildasm App.exe /out:App.il 生成与可执行文件相对应的IL代码。现在,您可以在记事本中编辑此il代码,并将ldstr从“ Inside main…”更改为“ Inside main change…”,如下所示:

  

IL_0000:nop

     

IL_0001:ldstr“内部main ...”

     

IL_0006:调用void [mscorlib] System.Console :: WriteLine(string)

     

IL_000b:不,

     

IL_000c:退出

收件人

  

IL_0000:nop

     

IL_0001:ldstr“内部主要部件已更改...”

     

IL_0006:调用void mscorlib] System.Console :: WriteLine(string)

     

IL_000b:不,

     

IL_000c:退出

现在,让我们通过运行ilasm App.il.从此il文件重建可执行文件,这将生成一个新的App.exe。如果运行App.exe,将得到以下输出“ Inside main changes…”

social.msdnc-sharpcorner中有一些有用的帖子,以及使用ILDASM和ILASM的指南。