Java可以使用JNI调用本机函数。这意味着我可以在C ++程序中运行JVM,并仅使用指针通过JNI构造Java对象。并且在此Java对象中,可以调用本机函数来访问正在运行的C ++程序中的数据。运行成功。
但是,如果我只是运行C ++程序并将一个对象的指针提供给Java程序。在Java中,我可以使用此指针构造许多对象来调用C ++中的本机函数吗?区别在于,我不在JNI中构造Java对象,而只是在C ++中获取对象的指针,然后在Java中,我使用JNI调用本地函数来访问C ++中的数据。数据存储在正在运行的C ++程序中。
那有可能吗? C ++程序可以保护一些吗?所以我不能通过对象的指针访问其数据?
答案 0 :(得分:0)
在Java中,您只能调用为JNI构建的C ++函数。另一方面,可以从Java调用C ++动态库中的任何JNI函数,并且恶意Java程序可以对JNI进行反向工程,并利用它来利用C ++代码中的某些漏洞。
答案 1 :(得分:0)
谢谢。我发现我以为JNI错误。我知道JNI可以做什么,但是忽略一些重要的事情。
我想问的问题是我是否可以将C ++中的对象的指针转换为Java对象并调用其本机函数来访问C ++中的对象数据。实际上,我需要在C ++进程中创建JVM,以将指针转换为Java,或者仅在Java进程中调用本机函数。而且当它们是两个进程时,无法执行此操作,这意味着我运行一个C ++进程并将其对象的指针提供给另一个正在运行的Java进程,然后我想通过在Java进程中调用本机函数来访问C ++进程中的数据。
一个进程拥有自己的内存资源,而另一个进程无法通过其本地函数调用(JNI)对其进行访问。进程可以通过多种方法(例如套接字)进行通信。