我们可以拆解(使用ILDasm)NGen-ed组件吗?

gma*_*n23 12 .net ngen ildasm

如果我是一个集会,那么ildasm仍然拆解它是否正常?

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

从Vs 2010命令提示符开始,我做到了

gacutil -i NGenILDasmTest.dll
Run Code Online (Sandbox Code Playgroud)

我可以看到GAC中安装的程序集.我跑了ildasm所以我可以查看IL.到现在为止还挺好.

然后我跑了

ngen NGenILDasmTest.dll
Run Code Online (Sandbox Code Playgroud)

(我没有为ngen指定任何选项).这个程序集成功编译完成.我找到了名称为NGenILDasmTest.ni.dll的文件夹

C:\Windows\Assembly\NativeImages_v4.0.30319_32\NGenILDasmTest\81d49dd4c7df22fb3df530402b58ffc9
Run Code Online (Sandbox Code Playgroud)

现在,当我像下面一样运行ildasm时

ildasm "C:\Windows\Assembly\NativeImages_v4.0.30319_32\NGenILDasmTest\81d49dd4c7df22fb3df530402b58ffc9\NGenILDasmTest.ni.dll"
Run Code Online (Sandbox Code Playgroud)

我可以看到Ngen-ed组件的内容.这是正常的吗?

从技术上讲,Ngen为IL生成本机CPU插件(并且显然将其置于C:\ windows\Assembly\NAtiveImages_V4.##### _ 32 - 在我的情况下).如果是这种情况,我怎么能使用ILDasm将NGen-ed程序集看作IL?

请帮助我理解我在这里缺少的"小东西".

vcs*_*nes 14

NGEN的程序集是IL plus本机代码.IL没有被删除.NGen程序集包含本机映像,这常常令人困惑.元数据仍然需要原始信息.

微软似乎没有关于NGen组件内部的非常具体的信息.我们知道的大多数信息来自逆向工程.

编辑:

安装.NET Framework 1.1(yay ..)之后 - 似乎.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 ...

现在,关于Ngen的有趣之处在于它不会消除IL或元数据,因为虽然执行时不需要IL代码,但元数据是因为程序所需的所有字符串和其他相关数据都包含在元数据.因此,Ngen将所有元数据复制到本机exe的.IL部分,并将IL代码复制为事后补充