ILDASM和ILASM,怎么用?

ILDASM and ILASM, how use them?

我很难尝试使用 Visual Studio 命令提示符 (Dis)assemble 一个 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',当我使用完整路径时我得到同样的错误。

这是怎么回事?

简单,就拿这行代码来说吧:

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

让我们把App.cs编译成App.exe。这个可执行文件现在打印 Inside main … when we 运行 it.

现在让我们尝试在不触及其源文件的情况下更改此可执行文件的输出。

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

IL_0000:  nop
IL_0001:  ldstr      "Inside main ..."
IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
IL_000b:  nop
IL_000c:  ret

IL_0000:  nop
IL_0001:  ldstr      "Inside main changed ..."
IL_0006:  call       void  [mscorlib]System.Console::WriteLine(string)
IL_000b:  nop
IL_000c:  ret

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

social.msdn and in c-sharpcorner 中有有用的帖子以及 ILDASM 和 ILASM 的使用指导。