Coding Global Background
Coding Global

SHARED CUSTOM JVM CLASSLOADER C

Archived a year ago
1 messages
1 members
Created a year ago
Updated a year ago
Open in Discord
L
варден
Verified
 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);

Replies (1)