Hi Manuel,

Can you show the IL that the compiler outputs and that you want to output
using Cecil?

Thanks,
Jb

On Thu, Aug 6, 2015 at 7:38 PM, Manuel Eisenschink <[email protected]>
wrote:

> Hello,
>
> my current task is to find & edit or create the finalizer for a certain
> class.
> In this case there is no finalizer defined, so the base-finalizer
> (System.Object) will be used, of course.
>
> I now have to override that Finalizer. I looked up a few solutions which
> all are obviously outdated (<2011).
> When I re-compile my assemblies with Cecil, I get the following CIL output:
>
> .method family hidebysig virtual instance void 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Void>
>  *Finalize 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.Lab.Forms:1.0.0.0/VisualBug.Lab.Forms.MainWindow/Finalize()>*()
>  cil managed
> {
>     .maxstack 8
>     L_0000: ldarg.0
>     L_0001: call instance class [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Type
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type>
>  [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Object
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object>::GetType
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object/GetType():System.Type>()
>     L_0006: ldarg.0
>     L_0007: ldfld class [App 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103>]App.Instancing.InstanceId
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Instancing.InstanceId>
>  App.Forms.MainWindow 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.Lab.Forms:1.0.0.0/VisualBug.Lab.Forms.MainWindow>::vbbgsMtrInsVr0221
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.Lab.Forms:1.0.0.0/VisualBug.Lab.Forms.MainWindow/vbbgsMtrInsVr0221:VisualBug.BugSpy.Instancing.InstanceId>
>     L_000c: call bool 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Boolean>
>  [App 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103>]App.Spy
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Spy>::UnsetToken
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Spy/UnsetToken(System.Type,VisualBug.BugSpy.Instancing.InstanceId):Boolean>(class
>  [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Type
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type>,
>  class [App 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103>]App.Instancing.InstanceId
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Instancing.InstanceId>)
>     L_0011: pop
>     L_0012: ldarg.0
>     L_0013: call instance void 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Void>
>  [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Object
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object>::Finalize
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object/Finalize()>()
> }
>
>
>
>
>
>
>
>
> .method family hidebysig virtual instance void 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Void>
>  *Finalize 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.Lab.Forms:1.0.0.0/VisualBug.Lab.Forms.MainWindow/Finalize()>*()
>  cil managed
> {
>     .maxstack 8
>     L_0000: ldarg.0
>     L_0001: call instance class [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Type
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type>
>  [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Object
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object>::GetType
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object/GetType():System.Type>()
>     L_0006: ldarg.0
>     L_0007: ldfld class [VisualBug.BugSpy 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103>]VisualBug.BugSpy.Instancing.InstanceId
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Instancing.InstanceId>
>  VisualBug.Lab.Forms.MainWindow 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.Lab.Forms:1.0.0.0/VisualBug.Lab.Forms.MainWindow>::vbbgsMtrInsVr0221
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.Lab.Forms:1.0.0.0/VisualBug.Lab.Forms.MainWindow/vbbgsMtrInsVr0221:VisualBug.BugSpy.Instancing.InstanceId>
>     L_000c: call bool 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Boolean>
>  [VisualBug.BugSpy 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103>]VisualBug.BugSpy.Spy
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Spy>::UnsetToken
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Spy/UnsetToken(System.Type,VisualBug.BugSpy.Instancing.InstanceId):Boolean>(class
>  [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Type
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type>,
>  class [VisualBug.BugSpy 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103>]VisualBug.BugSpy.Instancing.InstanceId
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://VisualBug.BugSpy:1.1.0.0:dce65d1ef2e32103/VisualBug.BugSpy.Instancing.InstanceId>)
>     L_0011: pop
>     L_0012: ldarg.0
>     L_0013: call instance void 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Void>
>  [mscorlib 
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Object
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object>::Finalize
>  
> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Object/Finalize()>()
> }
>
>
> When I take a look at the same method generated by the compiler, there is
> a lot more. I guess the Try-Finally stuff is not necessary but probably
> recommended.
> But what is clearly missing is the *.override* IL instruction.
>
> This is the code that generates the override:
>
> destructor = new MethodDefinition("Finalize",
>     MethodAttributes.Family | MethodAttributes.HideBySig | 
> MethodAttributes.Virtual |
>     MethodAttributes.ReuseSlot, module.Import(typeof (void)));
> baseType.Methods.Add(destructor);
>
>
>
> How can I achieve this? I don't understand why this won't become a valid
> override. Every answer on StackOverflow mentioned just
> those few attributes which have to be set in order to get it working.
> Obviously that's not enough or has been changed over time (just old
> answers).
>
>
> Thanks :)
>
> --
> --
> --
> 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.
>

-- 
-- 
--
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