zoukankan      html  css  js  c++  java
  • k__BackingField与反编译

     今天反编译umbraco的组件ProWorks Redirect Page v1.03,看到代码中有:
            [CompilerGenerated]
            private string <URL>k__BackingField;

    立马汗颜,自己搞C#到现在,也自称不是倒数第一,却没有见过这种形式。马上baidu,释怀!
    是反编译的原因!找到一篇很好的文章,转载如下:
    《reflector <....>k__BackingField 问题解决方法》

    使用 reflector后生成的源代码出现 :

    private string <LabelId>k__BackingField;

    这样的问题,造成编译失败。

    解决方法:

    因为菜,所以不能改 reflector ,只好改生成的源代码了,使用.net 的在文件中替换的功能来解决:

    1、Ctrl+Shift_H 打开替换窗口;

    2、如下图示,使用正则表达式替换;

     

    查找内容:\<{.#}\>k__BackingField

    替换内容:_\1_k__BackingField

    3、结束。

    没办法,懒人就是这个样子,谁让生成的代码里边这种错误这么多呢,要不然也用不着这个方法了。

    ===============================================================================
    goldarch:有网友自己写一段代码,反编译,观察结果如下:
    http://topic.csdn.net/u/20090726/16/50060e4f-8255-4706-abe8-455cb51fe2a7.html
    CompilerGenerated是反编译生成的代码如
     public class MyClass
      {
      public string Name{set;get;}
      public string Value { set; get; }

      public MyClass(string pName, string pValue) 
      {
      Name = pName;
      Value = pValue;
      }

      }
    反编译后
    反编译后
    public class MyClass
    {
      // Fields
      [CompilerGenerated]
      private string <Name>k__BackingField;
      [CompilerGenerated]
      private string <Value>k__BackingField;

      // Methods
      public MyClass(string pName, string pValue)
      {
      base..ctor();
      this.Name = pName;
      this.Value = pValue;
      return;
      }

      // Properties
      public string Name
      {
      [CompilerGenerated]
      get
      {
      string str;
      str = this.<Name>k__BackingField;
      Label_0009:
      return str;
      }
      [CompilerGenerated]
      set
      {
      this.<Name>k__BackingField = value;
      return;
      }
      }

      public string Value
      {
      [CompilerGenerated]
      get
      {
      string str;
      str = this.<Value>k__BackingField;
      Label_0009:
      return str;
      }
      [CompilerGenerated]
      set
      {
      this.<Value>k__BackingField = value;
      return;
      }
      }
    }

    =============================================
    goldarch结论:
    形如<URL>k__BackingField只不过就是一"变量命名"!

    只不过vs不认这个命名而以,把这个命名改成vs能认的命名就可以了。
    PWUrlRedirect代码简短,我直接把<URL>k__BackingField改成 _url,编译通过
    需要注意的是:要主动应用"替换"功能,vs自动的替换没有作用(它根本不认为那是变量,不会主动替换的)。

  • 相关阅读:
    OpenSSL 安装 (Linux系统)
    JVM 指令集
    Github清除历史提交,保留最新提交
    php7+apache2.4 安装(window)
    mysql 函数模拟序列
    SpringBoot配置成Liunx服务
    Liunx下NFS服务器的搭建与配置
    Laravel 出现"RuntimeException inEncrypter.php line 43: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths."问题的解决办法
    win7安装laravel
    win7安装composer
  • 原文地址:https://www.cnblogs.com/goldarch/p/2027071.html
Copyright © 2011-2022 走看看