Thanks for tge detailed answet.

I want to verify the method is invoked with cerrain inputs, e.g: if its
paraneter is an int, then check if the int passed to it adheres to cerrain
conditions tgat i will check.

Do i have to simply go back a few instructions to see the parameters that
were pushed, or is there an easier way ?
On 26 Nov 2014 05:58, "Artem Stekhnovskii" <[email protected]> wrote:

> Load the assembly:
>
>  AssemblyDefinition asm = AssemblyDefinition.ReadAssembly(@"C:\...
> \Assembly.dll");
>  ModuleDefinition mainMod = asm.MainModule;
>
> Find the MethodDefinition for the method you're interested in:
>
>  TypeDefinition classContainingYourMethod = mainMod.Types.FirstOrDefault (
> x => x.Name == "ClassName"); // this is LINQ
>  MethodDefinition yourMethod = classContainingYourMethod.Methods.
> FirstOrDefault (x => x.Name == "YourMethodsName"); //if your method is
> void ShowTooltip(), just type in "ShowTooltip"
>
> Now parse all Classes (types) in your assembly, parse all their Methods,
> parse all their Instructions, parse all their Operands and see if it's
> referencing yourMethod.
>
>          foreach (TypeDefinition td in mainMod.Types)
>             foreach (MethodDefinition md in td.Methods)
>                 if (md.HasBody)
>                     foreach (Instruction inst in md.Body.Instructions)
>                         if (inst.Operand == yourMethod)
>                             System.Console.WriteLine ("your method is
> being called here");
>
> *> how do i verify the parameters that are passed?*
> Parameters are pushed onto the evaluation stack in the instructions that
> are preceding the call.
>
> *>when finding it, i'd like to verify it was called correctly.*
> Don't understand the question.
>
> On Tuesday, November 25, 2014 11:13:49 PM UTC+1, Lior Tal wrote:
>>
>> Hello,
>>
>> I'd like to write a rule that given a method definition, looks through a
>> given assembly and checks whether this method has been invoked.
>>
>> Also, when finding it, i'd like to verify it was called correctly.
>>
>> I am pretty sure this is fairly easy to achieve with Mono.Cecil, are
>> there any good examples of code that does something similar online that i
>> can have a look at ?
>>
>> If not, conceptually what is the process here?
>>
>> Can i scan all the methods of the input assembly and look for a Call
>> instruction with the method definition i am interested in? how do i verify
>> the parameters that are passed?
>>
>> Any help will be greatly appreciated.
>>
>> Thanks
>> Lior
>>
>  --
> --
> --
> 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