NGEN的.NET应用程序是否有助于保护它免受逆向工程的影响?如果不是我什么时候使用它?

时间:2010-08-28 16:55:07

标签: c# .net vb.net compiler-construction ngen

如果Ngen不保护我的申请,我何时会合理地期望在我的职业生涯中使用这个应用程序?

3 个答案:

答案 0 :(得分:2)

杰弗里里希特在他的书中写了一篇很棒的文章,我不知道第三版是否有它,但是2002年他wrote关于Ngen'ing的一篇很棒的文章仍然很有用。

亮点:

  同时,还有几个潜力   有关NGen文件的问题:

     
      
  • 没有知识产权保护。很多人都相信   有可能发货NGend   文件没有发送   包含原始的IL代码   从而保持他们的智力   财产是一个秘密。不幸的是,这个   不可能。在运行时,CLR   需要访问程序集   元数据和NGend文件没有   包含元数据。

  •   
  • NGend文件可能会失去同步。当CLR加载时   NGen的文件比较了一些   有关的属性   以前编译的代码和   当前的执行环境。如果有的话   属性不匹配然后   NGen文件无法使用和   使用正常的JIT编译器进程   代替。

  •   
  • 管理不善。 NGen文件不会自动删除   装配卸载不利   轻松影响.NET框架   管理和XCOPY部署   故事。

  •   
  • 劣质负载时间性能(重新定位)。当Windows加载时   NGend文件,它检查是否   文件加载在其首选基础上   地址。如果文件不能加载它   首选基地址,然后是Windows   重新定位文件,修复所有   内存地址引用。这是   非常耗时,因为   Windows必须将整个文件加载到   内存并修改其中的各种字节   文件。有关的更多信息   重新定位请看我的书:   Microsoft的编程应用程序   Windows,第4版(微软   出版社)。

  •   
     

劣质执行时间表现。

     

编译代码时,NGen无法像JIT编译器那样对执行环境做出尽可能多的假设。这会导致NGen.exe生成具有许多内存引用间接的代码,这些代码对于JIT编译代码不是必需的

答案 1 :(得分:1)

NGen仅用于编译IL以提高性能。您可能希望查看代码混淆,以保护应用程序免受逆向工程。

答案 2 :(得分:0)

加载速度是它真正有用的全部。也就是说,它可以达到2000%(是的,这是正确的)改进。

编辑:

请注意,JIT代码通常比NGEN代码更快。