Coding Global Background
Coding Global

SHARED CUSTOM JVM CLASSLOADER C

Archived a year ago
1 messages
1 members
a year ago
Open in Discord
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); ```

Replies (1)