Simple JVMTI Agent – Windows / MinGW

A simple JVMTI agent in Windows using MinGW/Cygwin.

#include <jvmti.h>
#include <stdio.h>

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
    printf("I'm a native Agent....");
    return JNI_OK;
}

Compiling the program

gcc -c -o simpleJVMTI.o -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32"  SimpleJVMTI.c

Creating a DLL file

gcc -shared -o simpleJVMTI.dll  simpleJVMTI.o

Simple Hello World application

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("I'm inside main()");
    }
}

Running the Java application with the native agent

java -agentpath:C:/path/to/simpleJVMTI.dll HelloWorld

Output :

I'm inside main()
I'm a native Agent....