Full Trust CLR Verification issue: changing the Method Parameters order

Revision as of 22:09, 9 July 2014 by Bill Sempf (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
This page has been recommended for deletion.
You can help OWASP by improving it or discussing it on its Talk page.
Please add a comment to '{{taggedDocument ... | comment=<comment> ... }}'. See

Compile this:

using System;
using System.Text;
namespace Owasp
   class methodParams
       public static void Main()
           string sString = "String";
           StringBuilder sbStringBuilder = new StringBuilder("String Builder");
           // method1((string)sbStringBuilder, (StringBuilder)sString);  // this will not compile
           method1(sString, sbStringBuilder);
           method2(sbStringBuilder, sString);
       public static void method1(string sString, StringBuilder sbStringBuildert)
           Console.WriteLine("method1:    " + sString.ToString() + " ::: " + sbStringBuildert.ToString());
       public static void method2(StringBuilder sbStringBuilder, string sString)
           Console.WriteLine("method2:    " + sString.ToString() + " ::: " + sbStringBuilder.ToString());

ILDASM it and change

   IL_0012:  ldloc.0
   IL_0013:  ldloc.1
   IL_0014:  call       void Owasp.methodParams::method1(string,class [mscorlib]System.Text.StringBuilder)


   IL_0012:  ldloc.1
   IL_0013:  ldloc.0
   IL_0014:  call       void Owasp.methodParams::method1(string,class [mscorlib]System.Text.StringBuilder)

which changes the order that the parameters are pushed to the stack

ILASM it and confirm in reflector the changes:

public static void Main()
     string text1 = "String";
     StringBuilder builder1 = new StringBuilder("String Builder");
     methodParams.method1((string) builder1, (StringBuilder) text1);
     methodParams.method2(builder1, text1);

Execute it:

method1:    String Builder ::: String
method2:    String ::: String Builder

and confirm that the assembly is correct:

Z:\peverify _methodParams.exe
Microsoft (R) .NET Framework PE Verifier.  Version  2.0.50727.42
Copyright (c) Microsoft Corporation.  All rights reserved.
[IL]: Error: [Z:\methodParams\_methodParams.exe : Owasp.methodParams::Main][offset 0x00000014][found ref 'System.Text.StringBuilder'][expected ref 'System.String'] Unexpected type on the stack.
[IL]: Error: [Z:\methodParams\_methodParams.exe : Owasp.methodParams::Main][offset 0x00000014][found ref 'System.String'][expected ref 'System.Text.StringBuilder'] Unexpected type on the stack.
2 Errors Verifying _methodParams.exe