Martini Instrumentation Engine Interface

Introduction

Martini Instrumentation Engine (MIE) is designed to provide full support for low level Java bytecode and MSIL (Microsoft Intermediate Language) inspection and instrumentation. MIE provides the instrumentation APIs that are relevant for both: Java and .NET. However, although the two VMs have many things in common, they also differ in some senses. Additional specific Java related APIs are defined in JIE.h file, while specific .NET related APIs are defined in CIE.h.

In general, instrumentation for .NET is designed to work in three stages:

1. Init time, in which the client registers to MPI events and acquires a CIE interface. Both operations are done via Martini MPI interface.

2. Module load time, in which the client may register managed function callbacks to be called at runtime. When and from where they should be called is specified by the client in the third stage. At this stage the client can iterate the methods, change attributes of methods and find specific methods in the module. Requesting IModule interface should be done at this stage

3. Just before method JIT compilation, in which IdotNETMethod interface can be acquired for low level inspection or instrumentation of the method. During this stage the client may request an IdotNETMethodInfo interface for methods that are called from this method.

Instrumentation for Java is designed to work in two stages:

1. Init time, at which the client registers to MPI events and acquires a JIE interface. Both operations are done via Martini MPI interface.

2. During class-load-hook event, in which the class and its methods can be inspected and instrumented.



Generated on Thu Mar 6 15:07:55 2008 for Martini by doxygen 1.5.5