在这种情况下,java对象是否可以调用本机函数

can a java object call native function in this situation?

本文关键字:调用 本机 函数 是否 这种情况下 java 对象      更新时间:2023-10-16

Java可以使用JNI调用本机函数。这意味着我可以在C++程序中运行JVM,并通过JNI只使用指针构建java对象。在这个java对象中,可以调用本机函数来访问运行C++程序中的数据。它运行成功。

但是,如果我只是运行C++程序,并将一个对象的指针交给java程序。在java中,我可以用这个指针构造许多对象来调用C++中的本机函数吗?不同的是,我不在JNI中构造java对象,只在C++中获取对象的指针,然后在java中,我调用本机函数来使用JNI访问C++中的数据。数据存储在正在运行的C++程序中。

那么这可能吗?C++程序可能有一些保护吗?所以我不能通过对象的指针访问它的数据?

从Java,您只能调用为JNI构建的C++函数。另一方面,C++动态库中的任何JNI函数都可以从Java调用,恶意Java程序可以对您的JNI进行反向工程,并使用它来利用C++代码中的一些漏洞。

谢谢。我发现我认为JNI的处境不对。我知道JNI可以做什么,但忽略一些重要的事情。

我想问的问题是,我是否可以将C++中对象的指针转换为java对象,并调用其本机函数来访问C++中对象数据。事实上,我需要在C++进程中创建JVM来将指针转换为Java,或者只调用Java进程中的本机函数。当它们是两个进程时,没有办法做到这一点,这意味着我运行一个C++进程,并将其一个对象的指针提供给另一个运行Java进程,然后我想通过调用Java进程中的本机函数来访问C++进程中的数据。

一个进程拥有自己的内存资源,另一个进程无法通过其本机函数调用(JNI(进行访问。进程可以通过许多方法(如套接字(进行通信。