【问题标题】:Problem with Reflector and Automatic Properties反射器和自动属性的问题
【发布时间】:2010-10-29 02:00:58
【问题描述】:

我刚刚反汇编了一个项目以使用Reflector 对其进行调试,但它似乎不愿解码自动属性的“编译结果”,例如下一行给了我一个语法错误。我试过手动修复这些,但每次我修复一个,都会出现更多。

private string <GLDescription>k__BackingField;

对此我有什么办法吗?

【问题讨论】:

    标签: c# reverse-engineering decompiling reflector disassembly


    【解决方案1】:

    哈!愚蠢的我:我所要做的就是将 Reflector 选项中的反汇编优化设置为 .NET 3.5。我的是 2.0。

    【讨论】:

      【解决方案2】:

      编译器生成具有“不可描述的名称”的字段 - 即在 C# 本身中是非法的但是有效的 IL 的字段。

      没有将 IL 准确地翻译成“普通”C#(没有自动属性)。您可以将&lt;&gt; 替换为_,这将提供合法代码,但当然它不再是完全相同相同的代码了。但是,如果您只追求调试能力,那将不是问题。

      如果您反编译迭代器(即使用yield 语句的方法),您会发现更多相同的内容,包括使用fault 块,它们类似于finally 块,但它们仅在发生异常时运行(但没有捕捉到异常)。其他各种构造也会生成难以描述的名称,包括匿名方法、lambda 表达式和匿名类型。

      更广泛地说,您是否有权反编译此代码?如果作者不介意您这样做,他们可能愿意为您提供源代码,让您的生活更轻松。如果他们希望您从调试他们的源代码开始,您应该考虑反编译代码的道德(和潜在的法律)后果。这可能因地点而异:请咨询真正的律师以获得更明确的指导。

      编辑:看到你自己的答案,这很有意义。我将把它留在这里作为背景材料。

      【讨论】:

      • 所以它基本上是用于反编译的再见黄砖:-(我刚刚使用 3.5 优化再次运行它,它实际上解码了自动属性,但其他一切都非常丑陋。
      • 对,总会有一些东西是Reflector无法准确拼凑起来的。它非常适合查看某些东西的作用,但不适用于在每种情况下创建可编译的源代码。当然,在某些情况下您可以手动解决问题,但老实说,我会尽量避免需要它。
      • @John,您提出权限问题是对的,但我只是反编译库以尝试在调用代码中找到问题。作者现在不可用。但是,我看到代码被混淆了,所以我得继续猜测,等到早上。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      相关资源
      最近更新 更多