如何在不将其写入硬盘的情况下使用 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 运行。
如何在不将其写入硬盘的情况下以 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 运行。