Skip to content
Snippets Groups Projects
java.cc 1.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include "elf.hh"
    #include <jni.h>
    #include <string.h>
    
    extern elf::program* prog;
    
    #define JVM_PATH        "/usr/lib/jvm/jre/lib/amd64/server/libjvm.so"
    
    int main(int ac, char **av)
    {
        prog->add_object(JVM_PATH);
    
        auto JNI_GetDefaultJavaVMInitArgs
            = prog->lookup_function<void (void*)>("JNI_GetDefaultJavaVMInitArgs");
        JavaVMInitArgs vm_args = {};
        vm_args.version = JNI_VERSION_1_6;
        JNI_GetDefaultJavaVMInitArgs(&vm_args);
        vm_args.nOptions = 1;
        vm_args.options = new JavaVMOption[1];
        vm_args.options[0].optionString = strdup("-Djava.class.path=/tests");
    
        auto JNI_CreateJavaVM
            = prog->lookup_function<jint (JavaVM**, JNIEnv**, void*)>("JNI_CreateJavaVM");
        JavaVM* jvm = nullptr;
        JNIEnv *env;
    
        auto ret = JNI_CreateJavaVM(&jvm, &env, &vm_args);
        assert(ret == 0);
        auto mainclass = env->FindClass("Hello");
        auto mainmethod = env->GetStaticMethodID(mainclass, "main", "([Ljava/lang/String;)V");
        env->CallStaticVoidMethod(mainclass, mainmethod, nullptr);
    }