如何在不将其写入硬盘的情况下使用 Base64 字符串执行包含在 C++ 中的 jar 文件?

How can I execute a jar file included in c++ with a Base64 string without write it on the HDD?

如何在不将其写入硬盘的情况下以 Base64 字符串执行包含在我的 C++ exe 文件中的 jar 文件? 是否可以从内存或类似的东西执行它而硬盘上没有 2 个文件?

提前致谢

使用 JNI:

  • 创建 JVM 实例。
  • 在解码后创建一个 ByteArrayInputStream base64 jar 字符串。
  • 创建一个 JarInputStream 并将其传递给 字节数组输入流。
  • 迭代 JarInputStream 中的每个 jarEntry 和 使用 ClassLoader 加载 class。
  • 将每个 class 存储在 HashMap 中 快速访问。

另一种方法是调用 JNI 的:

jclass DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize bufLen);

示例: https://github.com/Brandon-T/Cpp-JVM

我将该示例添加到我的 Github 中,因为它太大而无法放在 Whosebug 上。注意:您不需要我编写的 JNI 包装器。如果您使用原始 JNI,它会减少大量代码。

包装器来自我很久以前写的一些遗留代码,我决定只使用它并让它为我跟踪 JavaVM 和 JNIEnv。

编辑: 请注意,我硬编码了 libJVM 和 libJNI 的路径:

https://github.com/Brandon-T/Cpp-JVM/blob/master/JVM.cpp#L41 因为没有它我无法在 OSX 上获得 JVM 运行。