Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制C++;访问JNI中某些类的代码_Java_Java Native Interface - Fatal编程技术网

Java 限制C++;访问JNI中某些类的代码

Java 限制C++;访问JNI中某些类的代码,java,java-native-interface,Java,Java Native Interface,我在Java程序中有两个类。A类和B类。 B类包含一个执行C++代码的本地函数。 据我所知,C++代码将运行在与java代码相同的进程中。 我的问题是,如何限制C++代码访问java内存和读取类的参数? 恐怕你运气不好。与反射不同,JNI是完全不可修复的:CallVoidMethod()或GetIntField()可以访问所有内容 在某种程度上,混淆可以有所帮助。如果类A被混淆,那么它的所有字段和方法的人类可读名称都将消失。通常混淆器会生成稳定的、可预测的名称,但通过简单的操作,它们可以随机化。

我在Java程序中有两个类。A类和B类。 B类包含一个执行C++代码的本地函数。

据我所知,C++代码将运行在与java代码相同的进程中。

<>我的问题是,如何限制C++代码访问java内存和读取类的参数?
恐怕你运气不好。与反射不同,JNI是完全不可修复的:CallVoidMethod()或GetIntField()可以访问所有内容

在某种程度上,混淆可以有所帮助。如果类A被混淆,那么它的所有字段和方法的人类可读名称都将消失。通常混淆器会生成稳定的、可预测的名称,但通过简单的操作,它们可以随机化。Proguard还可以“优化”类,内联一些方法。不再存在的方法不能通过JNI调用

但是,字段仍然存在,从“外部”调用的方法仍然存在,甚至可能保留它们的名称。因此,最好不要将无法信任的JNI库加载到流程中。这对于任何DLL都是正确的