Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding code to the beginning / end of methods in runtime dynamically

I know instrumentation is a technique to add trace code dynamically into the methods to enable tracing and debugging.

I was wondering if this is only a "Trace" option, hard coded into the CLR to add only trace code, or is there the ability to add any code to the methods?

For example, I want to check for a condition in the beginning of every single method call in a certain class (say for permissions). Can I do this via adding dynamic code to the beginning of the methods in execution time?

I'm not sure how this trace "instrumentation" thing works, but I'm wondering if this can be used for other goals too, or not.

like image 751
Iravanchi Avatar asked Mar 17 '10 11:03

Iravanchi


1 Answers

Basically what you should do is write a CLR profiler and use the profiler API in c++
You need to implement the ICorProfilerCallback interface.
What you are looking for is in the JITCompilationStarted callback. This method is called each time a managed method gets called and before the jit compiler compiles the IL into machine code. Any code insertion work during run time should be done in JITCompilationStarted.
You can look at the open source coverage tool part cover as an example how to do it.

like image 160
Ohad Horesh Avatar answered Oct 21 '22 18:10

Ohad Horesh