title: Execute .NET IL code in C#
body: <p>Is there any way to execute an array of IL codes in C# like shell codes in C/C++?</p>
  
  <p>I want to create a method, convert it to IL code, obfuscate it and store in an array of bytes and finally want to execute it decrypt the array content and execute IL code. </p>
  
  <p>For example this is my C# code:</p>
  
  <pre><code> static int MyMethod(string A, int B)
   {
      B += 10;
      if (A.Equals("A"))
          B = 0;
      return B;
   }
  </code></pre>
  
  <p>Now I convert it to IL code :</p>
  
  <pre><code> private static int MyMethod(string A, int B)
    {
      locals: int local_0,
              bool local_1
  
      /* 0000025C 00             */ nop
      /* 0000025D 03             */ ldarg_1 // int B
      /* 0000025E 1F 0A          */ ldc_i4_s 10
      /* 00000260 58             */ add
      /* 00000261 10 01          */ starg_s arg_1 // int B
      /* 00000263 02             */ ldarg_0 // string A
      /* 00000264 72 01 00 00 70 */ ldstr "A"
      /* 00000269 6F 11 00 00 0A */ callvirt System.String::Equals(string) // returns bool
      /* 0000026E 16             */ ldc_i4_0
      /* 0000026F FE 01          */ ceq
      /* 00000271 0B             */ stloc_1 // bool local_1
      /* 00000272 07             */ ldloc_1 // bool local_1
      /* 00000273 2D 03          */ brtrue_s loc_28
      /* 00000275 16             */ ldc_i4_0
      /* 00000276 10 01          */ starg_s arg_1 // int B
  loc_28:
      /* 00000278 03             */ ldarg_1 // int B
      /* 00000279 0A             */ stloc_0 // int local_0
      /* 0000027A 2B 00          */ br_s loc_32
  loc_32:
      /* 0000027C 06             */ ldloc_0 // int local_0
      /* 0000027D 2A             */ ret
    }
  </code></pre>
  
  <p>And finally this is a byte array :</p>
  
  <pre><code>private byte[] ilcode = 
  {
     0x00, 0x03, 0x1F, 0x0A, 0x58, 0x10, 0x01, 0x02, 0x72, 0x01, 0x00, 0x00, 0x70, 0x6F, 0x11, 0x00, 0x0, 0x0A, 0x16,
     0xFE, 0x01, 0x0B, 0x07, 0x2D, 0x03, 0x16, 0x10, 0x01, 0x03, 0x0A, 0x2B, 0x00, 0x06, 0x2A
  };
  </code></pre>