SHARED CUSTOM JVM CLASSLOADER C
Archiviert a year ago
L
варден
Verified
```c
const char* javaNetUrlClassName = "java/net/URL";
jclass urlClass = env->FindClass(javaNetUrlClassName);
if (urlClass == NULL) {
char msg[50];
sprintf(msg, "couldn't find class: %s\n", javaNetUrlClassName);
env->FatalError((char*)msg);
}
printf("urlClass created\n");
jmethodID urlConstructor = env->GetMethodID(urlClass, "<init>", "(Ljava/lang/String;)V");
jstring jarPathJString = wcharToJstring(env, jarPath);
jobject url = env->NewObject(urlClass, urlConstructor, jarPathJString);
env->ReleaseStringUTFChars(jarPathJString, NULL);
if (url == NULL) {
env->FatalError("Couldn't create URL object");
}
printf("jar url created\n");
jobjectArray urls = env->NewObjectArray(1, env->FindClass(javaNetUrlClassName), NULL);
env->SetObjectArrayElement(urls, 0, url);
jclass classLoaderClass = env->FindClass("java/net/URLClassLoader");
if (classLoaderClass == nullptr) {
printf("impossibile trovare il classloader.class");
return false;
}
jmethodID constructor = env->GetMethodID(classLoaderClass, "<init>", "([Ljava/net/URL;)V");
jobject classLoader = env->NewObject(classLoaderClass, constructor, urls);
printf("classloader created \n");
jclass clazz = env->FindClass("java/lang/Class");
jmethodID classForNameMethod = env->GetStaticMethodID(clazz, "forName", "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;");
if (classForNameMethod == NULL) {
env->FatalError("Class.forName(String,boolean,java.lang.ClassLoader)java.lang.Class method not found\n");
}
jstring classToLoad = env->NewStringUTF("Agent");//PUT HERE YOUR CLASS
jclass jarClass = (jclass)env->CallStaticObjectMethod(clazz, classForNameMethod, classToLoad, true, classLoader);
env->ReleaseStringUTFChars(classToLoad, NULL);
if (jarClass == NULL) {
printf("jarClass found %s\n", jarClass);
char msg[100];
sprintf(msg, "jar init class not found: Agent.class\n");
env->FatalError((char*)msg);
}
jmethodID mainMethod = env->GetStaticMethodID(jarClass, "main", "()V");//PUT HERE YOUR MAIN METHOD WITH SIGNATURE
jint result = env->CallStaticIntMethod(jarClass, mainMethod);
printf("loaded jar and executed main\n");
Sleep(1000);
```
