首页 > 解决方案 > 关于 DefineClass 和我尝试使用它的问题

问题描述

我正在尝试通过将 DLL 注入进程并使用 JNI 与 java 交互来在 java 进程中创建类/注入类。

我遇到了一个名为 DefineClass 的函数,但我无法让它按照我的预期工作,所以我对函数采用的参数有一些疑问:

  1. 就我而言,我将什么作为类加载器传递?

  2. 它接受一个字节数组及其长度作为类的“内容”,获取这些字节的正确方法是什么?

  3. 类的哪些部分将包含在字节数组中?我是包括所有东西还是去掉部分?

到目前为止,我所做的一切都导致函数返回 null,所以我不确定从哪里开始寻找。如果有人会包含一些示例用法或有关用法的重要说明,那将是惊人的!

jobject defined = jni->DefineClass("ChatFormatting", NULL, reach_buf, 4132);

if (defined == nullptr) {
   std::cout << "Defined is NULL." << std::endl;
} else {
   std::cout << "Success!" << std::endl;
}

标签: c++java-native-interfacejnienv

解决方案


您只能获取类名,并且其成员条目地址不正确。在注入之前,您必须通过注入模块地址更改条目地址。


推荐阅读