Hey,

Good catch!

Again, if you have an assembly you can send me, that would be nice.

Jb

On 9/18/07, Ivan <[EMAIL PROTECTED]> wrote:
>
> Whilst using monomerge.exe I found a case where MethodBody.Clone
> didn't decode an instruction.
> The method was like below:
>
> .method assembly specialname rtspecialname instance void .ctor() cil
> managed
> {
>     .maxstack 4
>     L_0000: ldarg 0
>     L_0004: call instance void [mscorlib]System.Object::.ctor()
>
> While processing "ldarg 0" the routine couldn't find a method
> parameter to match the operand.
> I have limited CIL knowledge, but I believe "ldarg 0" references the
> "this" pointer.
> I changed my code to recognise and clone the "this" operand.
>
> diff -u3 -r org\Mono.Cecil/Mono.Cecil.Cil/MethodBody.cs Mono.Cecil/
> Mono.Cecil.Cil/MethodBody.cs
> --- org\Mono.Cecil/Mono.Cecil.Cil/MethodBody.cs 2007-07-13
> 08:28:50.000000000 +1000
> +++ Mono.Cecil/Mono.Cecil.Cil/MethodBody.cs     2007-09-18
> 16:25:09.445511600 +1000
> @@ -130,7 +130,7 @@
>                                 case OperandType.InlineParam :
>                                 case OperandType.ShortInlineParam :
>                                         int param = 
> body.Method.Parameters.IndexOf
> ((ParameterDefinition) instr.Operand);
> -                                       ni.Operand = parent.Parameters 
> [param];
> +                                       ni.Operand = instr.Operand == 
> body.Method.This ?
> nb.Method.This : parent.Parameters[param];
>                                         break;
>                                 case OperandType.InlineVar :
>                                 case OperandType.ShortInlineVar :
>
>
> >
>


-- 
Jb Evain  <[EMAIL PROTECTED]>

--~--~---------~--~----~------------~-------~--~----~
--
mono-cecil
-~----------~----~----~----~------~----~------~--~---

Reply via email to