仍在处理基于修改ILAsm文件的混淆程序。 (参考Which C# method names should not be obfuscated?)
在查看ILAsm代码时,我得到的印象是.property语句不用于任何东西,至少不用于程序执行。我认为他们只是为Visual Studio提供元数据吗?如果是这样,当ILAsm代码仅用于生成永远不会与Visual Studio一起使用的生产模块时,是否可以简单地删除它们?
答案 0 :(得分:4)
你是正确的,事实被宣布为属性不会影响程序执行。 正如本书 Inside Microsoft .NET IL Assembler 在关于属性的章节的介绍中所述,JIT编译器和执行引擎完全没有意识到属性,并且没有IL指令对属性概念进行任何引用。
请注意,Visual Studio不是元数据的唯一使用者。如果你剥离.property
并重新组合,你将拥有getter和setter方法,但它显然不再是属性了。这个问题最明显的例子:如果一个对象的实例被移交给另一个使用反射来调用类上每个属性的方法怎么办?由于提议的混淆方法,将无法找到属性并且运行时行为已更改。
当然,反射和序列化等场景是混淆工具的常见问题,正如您在上一个问题中所讨论的那样。所以,我所说的是,这是有问题的,但它在与您的其他线程中讨论的类似场景中的问题 - 特别是正在使用元数据或在运行时执行序列化的场景。 / p>
我上面提到的这本书的最新版本有一个不同的名称:Expert .NET 2.0 IL Assembler;它可能是一个有用的参考。 Compiling for the .NET Common Language Runtime也可能很有价值。