<div>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">Hello,</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">I am trying to do a 
small experiment by extending MONO internal.</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"></span></font>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">&lt;the first 
requirement&gt;</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">I'd like to add a 
certain hook function in front of some methods. There were some approaches 
discussed before about it like using pre-processor to manipulate C# source code 
or assembly file. But, I'd like to make it work by extending MONO. The hook 
function is also an internal function within MONO.</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"></span></font>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">&lt;the second 
requirement&gt;</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">Methods of a class 
are class-based. That is, the objects from the class use same 
methods.</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">But, I'd like to 
make methods perform some different action per object.</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">For example, 
</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">A&nbsp; class C1 has a 
method method1().&nbsp;The objects&nbsp;O1 and O2 are instances of the class 
C1.&nbsp;&nbsp;</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">When O1.method1() is 
called,&nbsp;it performs some action through a hook function, and then 
executes&nbsp;method1().&nbsp; </span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"><span class="013461616-19042006">When O2.method1() is called,&nbsp;it just 
executes&nbsp;method1().&nbsp; </span></span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"></span></font>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">One approach might 
generate two different native codes for the method: one with hook function, and 
the other without hook function. Then, create two vtable: one with the method 
with hook (name it as vtable1), and the other with the method without hook 
function (vtable2).</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">Then, 
</span></font><font face="Arial" size="2"><span class="013461616-19042006">let the 
objects to point to different vtable like O1 pointing to vtable1 and O2 pointing 
to vtable2.</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">&nbsp; 
</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">&lt;Question1&gt; It 
doesn't need to be this approach as long as calling O2.method1() performs the 
hook first, then execute its main method. But, making the hook call the method 
might not be easy because there is&nbsp; no way to define an internal function in 
runtime, which comply with the signature of the method?</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"></span></font>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">&lt;Question2 : what 
i' d like to know&gt;</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">To do it, I'd like 
to get some hints which source parts of MONO I have to look at. 
</span></font><font face="Arial" size="2"><span class="013461616-19042006">There are 
two parts&nbsp;I have to figure out in mono: </span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">&nbsp;(first) how to 
insert a hook? mono_method_to_ir() in mini.c&nbsp;seems to be&nbsp;the spot to insert a 
hook.</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">&nbsp;(second)&nbsp;&nbsp; where to 
have a method translated two time? Should it be somewhere of 
mini_method_compile()?</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"></span></font>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">One assumption is 
that I already know&nbsp;which methods and objects are the&nbsp;target.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"></span></font>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">Sorry about this 
long posting. </span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006">I appreciate any 
hint or opinion.</span></font></div>
<div><font face="Arial" size="2"><span class="013461616-19042006"></span></font>&nbsp;</div>
<div><font face="Arial" size="2"><span class="013461616-19042006">Thanks..</span></font></div>