gpt4 book ai didi

c# - 是否可以从 ILAsm 文件中删除 .property 语句以供生产使用?

转载 作者:行者123 更新时间:2023-11-30 21:15:26 26 4
gpt4 key购买 nike

仍在基于修改 ILAsm 文件开发我的混淆程序。 (引用 Which C# method names should not be obfuscated?)

在查看 ILAsm 代码时,我的印象是 .property 语句没有用于任何用途,至少没有用于程序执行。我是否认为它们只是为 Visual Studio 提供元数据?如果是这样,当 ILAsm 代码将仅用于生成永远不会与 Visual Studio 一起使用的生产模块时,是否可以简单地删除它们?

最佳答案

您是正确的,将某物声明为属性这一事实不会影响程序执行。正如 Inside Microsoft .NET IL Assembler 一书在其关于属性的章节的介绍中所述,JIT 编译器和执行引擎完全不知道属性,并且没有任何 IL 指令引用属性概念。

请注意,Visual Studio 不是元数据的唯一使用者。如果您剥离 .property 并重新组合,您将拥有 getter 和 setter 方法,但它显然不再是属性。这成为一个问题的最明显的例子是:如果一个对象的实例被传递给另一个使用反射来调用类的每个属性的方法怎么办?由于建议的混淆方法,将找不到属性并且运行时行为已更改。

当然,反射和序列化等场景是混淆工具的常见陷阱,正如您在上一个问题中所讨论的那样。所以,我要说的是,它是有问题的,但它在与您在其他线程中讨论的场景类似的一组场景中存在问题——特别是那些在运行时使用元数据或执行序列化的场景。

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

关于c# - 是否可以从 ILAsm 文件中删除 .property 语句以供生产使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5761202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com