2011-04-23 80 views
2

仍在使用基于修改ILAsm文件的混淆程序。 (Ref。Which C# method names should not be obfuscated?是否可以从ILAsm文件中删除.property语句以供生产使用?

在查看ILAsm代码时,我感觉到.property语句不用于任何事情,至少不用于程序执行。我是否认为他们只是为Visual Studio提供元数据?如果是这样,当ILAsm代码只用于生产永远不会用于Visual Studio的生产模块时,只需将其删除即可?

+2

所以,愚蠢的问题:你试过去除它,看看它有什么影响?你在ILAsm和.property上做了什么研究,看看它有什么用途? – jcolebrand 2011-04-23 00:18:54

+1

也许我可以尝试这样做,也许它会好起来,也许以后会很明显,它毕竟不是一个好主意。所以也许一个聪明的事情就是要求那些比我有更多知识的人提供建议。 – RenniePet 2011-04-23 00:40:21

+0

非常真实,确实非常真实。我只是好奇,如果你已经遇到了什么。 – jcolebrand 2011-04-23 00:49:09

回答

4

事实上,声明属性并不影响程序执行的事实是正确的。 由于本书在介绍有关属性的章节中说明,JIT编译器和执行引擎完全不了解属性,并且没有IL指令对属性概念进行任何引用。

请注意,Visual Studio不是唯一的元数据消费者。如果你去掉.property并重新组装,你将会拥有getter和setter方法,但它显然不再是一个属性。这成为一个问题的最明显的例子:如果一个对象的实例被切换到另一个使用反射来调用该类的每个属性的方法?由于提出的混淆方法,属性不会被发现,并且运行时行为已经发生变化。

当然,像反射和序列化这样的场景是混淆工具的一个常见问题,正如您在前面的问题中讨论的那样。所以,我说的是,这是有问题的,但是它在与其他线程中讨论的类似的场景中存在问题 - 尤其是在运行时正在使用元数据或序列化的场景。

我上面提到的这本书的最新版有一个不同的名字:Expert .NET 2.0 IL Assembler;它可能是对你有用的参考。 Compiling for the .NET Common Language Runtime也可能是有价值的。

+0

感谢您提供非常丰富的答案。这一定花了一些时间打印,我很欣赏它。 – RenniePet 2011-04-23 09:43:24

相关问题