Has anyone previously run into this issue with Cecil? I tried running 
PEVerify against my modified assembly, and it gives me this output:

*Microsoft (R) .NET Framework PE Verifier.  Version  4.0.30319.33440*
*Copyright (c) Microsoft Corporation.  All rights reserved.*

*[IL]: Error: [...\Deflector.NET\Deflect*
*or\Deflector.Tests\bin\Debug\output.dll : 
SampleLibrary.SampleClassWithConstruct*
*orCall::DoSomething][mdToken=0x6000006][offset 0x00000124] Unable to 
resolve tok*
*en.*
*1 Error(s) Verifying output.dll*

Offset 0x124 looks like this:


*  IL_0124:  ldtoken    !0[]  IL_0129:  call       class 
[mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype 
[mscorlib]System.RuntimeTypeHandle)*

Here's the C# code snippet that emits the IL:

*// Save the return type*
*var getTypeFromHandle = module.Import(GetTypeFromHandle);*

*var returnType = targetMethod.ReturnType;*
*IL.Emit(OpCodes.Ldtoken, returnType);*
*IL.Emit(OpCodes.Call, getTypeFromHandle);*

In this case, the return type is supposed to be just an array of int32s, 
but I don't know why it substitutes the !0 instead of an int array type. Is 
this the expected behavior for Cecil?

Here's the complete method IL dump:

*.method public hidebysig instance void  DoSomething() cil managed*
*{*
*  .custom instance void 
[Deflector]Deflector.MethodCallsAlreadyInterceptedAttribute::.ctor() = ( 01 
00 00 00 ) *
*  // Code size       353 (0x161)*
*  .maxstack  7*
*  .locals init (class [mscorlib]System.Collections.Generic.List`1<int32> 
V_0,*
*           int32[] V_1,*
*           class [System]System.Collections.Generic.Stack`1<object> V_2,*
*           object V_3,*
*           class [Deflector]Deflector.IInvocationInfo V_4,*
*           class [Deflector]Deflector.IMethodCall V_5,*
*           object V_6,*
*           class [mscorlib]System.Type[] V_7,*
*           class [mscorlib]System.Type[] V_8,*
*           class [mscorlib]System.Reflection.MethodBase[] V_9,*
*           class [mscorlib]System.Collections.Generic.IDictionary`2<class 
[mscorlib]System.Reflection.MethodBase,class 
[Deflector]Deflector.IMethodCall> V_10,*
*           class [Deflector]Deflector.IMethodCallProvider V_11)*
*  IL_0000:  call       class [Deflector]Deflector.IMethodCallProvider 
[Deflector]Deflector.MethodCallProviderRegistry::GetProvider()*
*  IL_0005:  stloc      V_11*
*  IL_0009:  newobj     instance void class 
[mscorlib]System.Collections.Concurrent.ConcurrentDictionary`2<class 
[mscorlib]System.Reflection.MethodBase,class 
[Deflector]Deflector.IMethodCall>::.ctor()*
*  IL_000e:  stloc      V_10*
*  IL_0012:  ldloc      V_11*
*  IL_0016:  brfalse    IL_008a*
*  IL_001b:  ldc.i4     0x2*
*  IL_0020:  newarr     [mscorlib]System.Reflection.MethodBase*
*  IL_0025:  stloc      V_9*
*  IL_0029:  ldloc      V_9*
*  IL_002d:  ldc.i4     0x0*
*  IL_0032:  ldtoken    method instance !0[] class 
[mscorlib]System.Collections.Generic.List`1<int32>::ToArray()*
*  IL_0037:  ldtoken    class 
[mscorlib]System.Collections.Generic.List`1<int32>*
*  IL_003c:  call       class [mscorlib]System.Reflection.MethodBase 
[mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype 
[mscorlib]System.RuntimeMethodHandle,*
*                                                                          
                                                      valuetype 
[mscorlib]System.RuntimeTypeHandle)*
*  IL_0041:  stelem.ref*
*  IL_0042:  ldloc      V_9*
*  IL_0046:  ldc.i4     0x1*
*  IL_004b:  ldtoken    method instance void class 
[mscorlib]System.Collections.Generic.List`1<int32>::.ctor()*
*  IL_0050:  ldtoken    class 
[mscorlib]System.Collections.Generic.List`1<int32>*
*  IL_0055:  call       class [mscorlib]System.Reflection.MethodBase 
[mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype 
[mscorlib]System.RuntimeMethodHandle,*
*                                                                          
                                                      valuetype 
[mscorlib]System.RuntimeTypeHandle)*
*  IL_005a:  stelem.ref*
*  IL_005b:  ldloc      V_11*
*  IL_005f:  ldloc      V_6*
*  IL_0063:  ldtoken    method instance void 
SampleLibrary.SampleClassWithConstructorCall::DoSomething()*
*  IL_0068:  ldtoken    SampleLibrary.SampleClassWithConstructorCall*
*  IL_006d:  call       class [mscorlib]System.Reflection.MethodBase 
[mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype 
[mscorlib]System.RuntimeMethodHandle,*
*                                                                          
                                                      valuetype 
[mscorlib]System.RuntimeTypeHandle)*
*  IL_0072:  ldloc      V_9*
*  IL_0076:  ldloc      V_10*
*  IL_007a:  ldc.i4     0x0*
*  IL_007f:  ldc.i4.1*
*  IL_0080:  newobj     instance void 
[mscorlib]System.Diagnostics.StackTrace::.ctor(int32,*
*                                                                          
          bool)*
*  IL_0085:  callvirt   instance void 
[Deflector]Deflector.IMethodCallProvider::AddMethodCalls(object,*
*                                                                          
                    class [mscorlib]System.Reflection.MethodBase,*
*                                                                          
                    class 
[mscorlib]System.Collections.Generic.IEnumerable`1<class 
[mscorlib]System.Reflection.MethodBase>,*
*                                                                          
                    class 
[mscorlib]System.Collections.Generic.IDictionary`2<class 
[mscorlib]System.Reflection.MethodBase,class 
[Deflector]Deflector.IMethodCall>,*
*                                                                          
                    class [mscorlib]System.Diagnostics.StackTrace)*
*  IL_008a:  nop*
*  IL_008b:  nop*
*  IL_008c:  newobj     instance void class 
[mscorlib]System.Collections.Generic.List`1<int32>::.ctor()*
*  IL_0091:  stloc.0*
*  IL_0092:  ldloc.0*
*  IL_0093:  newobj     instance void class 
[System]System.Collections.Generic.Stack`1<object>::.ctor()*
*  IL_0098:  stloc      V_2*
*  IL_009c:  ldloc      V_10*
*  IL_00a0:  ldtoken    method instance !0[] class 
[mscorlib]System.Collections.Generic.List`1<int32>::ToArray()*
*  IL_00a5:  ldtoken    class 
[mscorlib]System.Collections.Generic.List`1<int32>*
*  IL_00aa:  call       class [mscorlib]System.Reflection.MethodBase 
[mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype 
[mscorlib]System.RuntimeMethodHandle,*
*                                                                          
                                                      valuetype 
[mscorlib]System.RuntimeTypeHandle)*
*  IL_00af:  callvirt   instance bool class 
[mscorlib]System.Collections.Generic.IDictionary`2<class 
[mscorlib]System.Reflection.MethodBase,class 
[Deflector]Deflector.IMethodCall>::ContainsKey(!0)*
*  IL_00b4:  brfalse    IL_0158*
*  IL_00b9:  ldloc      V_10*
*  IL_00bd:  ldtoken    method instance !0[] class 
[mscorlib]System.Collections.Generic.List`1<int32>::ToArray()*
*  IL_00c2:  ldtoken    class 
[mscorlib]System.Collections.Generic.List`1<int32>*
*  IL_00c7:  call       class [mscorlib]System.Reflection.MethodBase 
[mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype 
[mscorlib]System.RuntimeMethodHandle,*
*                                                                          
                                                      valuetype 
[mscorlib]System.RuntimeTypeHandle)*
*  IL_00cc:  callvirt   instance !1 class 
[mscorlib]System.Collections.Generic.IDictionary`2<class 
[mscorlib]System.Reflection.MethodBase,class 
[Deflector]Deflector.IMethodCall>::get_Item(!0)*
*  IL_00d1:  stloc      V_5*
*  IL_00d5:  ldloc      V_5*
*  IL_00d9:  brfalse    IL_0158*
*  IL_00de:  stloc      V_6*
*  IL_00e2:  ldloc      V_6*
*  IL_00e6:  ldtoken    method instance !0[] class 
[mscorlib]System.Collections.Generic.List`1<int32>::ToArray()*
*  IL_00eb:  ldtoken    class 
[mscorlib]System.Collections.Generic.List`1<int32>*
*  IL_00f0:  call       class [mscorlib]System.Reflection.MethodBase 
[mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype 
[mscorlib]System.RuntimeMethodHandle,*
*                                                                          
                                                      valuetype 
[mscorlib]System.RuntimeTypeHandle)*
*  IL_00f5:  ldc.i4     0x0*
*  IL_00fa:  ldc.i4.1*
*  IL_00fb:  newobj     instance void 
[mscorlib]System.Diagnostics.StackTrace::.ctor(int32,*
*                                                                          
          bool)*
*  IL_0100:  ldc.i4     0x0*
*  IL_0105:  newarr     [mscorlib]System.Type*
*  IL_010a:  stloc      V_7*
*  IL_010e:  ldloc      V_7*
*  IL_0112:  ldc.i4     0x0*
*  IL_0117:  newarr     [mscorlib]System.Type*
*  IL_011c:  stloc      V_8*
*  IL_0120:  ldloc      V_8*
*  IL_0124:  ldtoken    !0[]*
*  IL_0129:  call       class [mscorlib]System.Type 
[mscorlib]System.Type::GetTypeFromHandle(valuetype 
[mscorlib]System.RuntimeTypeHandle)*
*  IL_012e:  ldloc      V_2*
*  IL_0132:  callvirt   instance !0[] class 
[System]System.Collections.Generic.Stack`1<object>::ToArray()*
*  IL_0137:  newobj     instance void 
[Deflector]Deflector.InvocationInfo::.ctor(object,*
*                                                                          
      class [mscorlib]System.Reflection.MethodBase,*
*                                                                          
      class [mscorlib]System.Diagnostics.StackTrace,*
*                                                                          
      class [mscorlib]System.Type[],*
*                                                                          
      class [mscorlib]System.Type[],*
*                                                                          
      class [mscorlib]System.Type,*
*                                                                          
      object[])*
*  IL_013c:  stloc      V_4*
*  IL_0140:  ldloc      V_5*
*  IL_0144:  ldloc      V_4*
*  IL_0148:  callvirt   instance object 
[Deflector]Deflector.IMethodCall::Invoke(class 
[Deflector]Deflector.IInvocationInfo)*
*  IL_014d:  unbox.any  !0[]*
*  IL_0152:  ldnull*
*  IL_0153:  br         IL_015e*
*  IL_0158:  nop*
*  IL_0159:  callvirt   instance !0[] class 
[mscorlib]System.Collections.Generic.List`1<int32>::ToArray()*
*  IL_015e:  nop*
*  IL_015f:  stloc.1*
*  IL_0160:  ret*
*} // end of method SampleClassWithConstructorCall::DoSomething*

-- 
-- 
--
mono-cecil
--- 
You received this message because you are subscribed to the Google Groups 
"mono-cecil" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to