如果我将NGen装配,那么ildasm仍然可以拆卸它是正常的吗?

好的。我编写了一个HelloWorld类库,随后的dll名为NGenILDasmTest.dll。
->针对.Net fw 4。

在Vs 2010命令提示符下,我做了

gacutil -i NGenILDasmTest.dll

我可以看到GAC中安装了该程序集。而且我运行ildasm以便查看IL。
到现在为止还挺好。

然后我跑
ngen NGenILDasmTest.dll

(我没有为ngen指定任何选项)。并且此程序集已成功编译。我在文件夹下找到了名称为NGenILDasmTest.ni.dll的文件
C:\Windows\Assembly\NativeImages_v4.0.30319_32\NGenILDasmTest\81d49dd4c7df22fb3df530402b58ffc9

现在,当我像下面那样运行ildasm时
ildasm "C:\Windows\Assembly\NativeImages_v4.0.30319_32\NGenILDasmTest\81d49dd4c7df22fb3df530402b58ffc9\NGenILDasmTest.ni.dll"

我可以看到Ngen-ed程序集的内容。这正常吗?

从技术上讲,Ngen会为IL生成 native CPU指令(显然是将其放在C:\windows\Assembly\NAtiveImages_V4下。在我的情况下为##### _ 32)。如果是这种情况,我如何仍可以使用ILDasm将NGen-ed程序集视为IL?

请帮助我了解我在这里缺少的“小东西”。

最佳答案

NGEN的程序集是IL加上 native 代码。 IL未被剥离。 NGen程序集仅包含 native 镜像经常会引起混淆。元数据仍需要原始信息。

Microsoft似乎没有关于NGen程序集内部的非常具体的信息。我们知道的大多数信息来自逆向工程。

编辑:

安装.NET Framework 1.1(是)之后-似乎.NET 1.1 NGen确实去除了IL。似乎从v2开始-保留了IL。这似乎就是周围存在矛盾的信息的原因。进行此更改的确切原因似乎未知。

这里有一篇关于ngen的内部原理的好文章(以及对于混淆来说这是一个非常糟糕的主意):http://www.woodmann.com/forum/entry.php?68-Rebuilding-native-.NET-exes-into-managed-.NET-exes-by-Exploiting-lefotver-IL ...

关于.net - 我们可以反汇编(使用ILDasm)NGen版本的程序集吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7373169/

10-10 14:57