为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2021-12-10 16:23:56
Java 可以使用 JNI 调用本机函数。这意味着我可以在我的 C++ 程序中运行一个 JVM,并通过 JNI 仅使用指针构造 java 对象。并且在这个java对象中,可以调用本地函数来访问运行C++程序中的数据。它运行成功。但是,如果我只是运行 C++ 程序并将一个对象的指针提供给 java 程序。在java中,我可以使用这个指针构造许多对象来调用C++中的本地函数吗?不同的是我没有在JNI中构造java对象而只是在C++中获取对象的指针,然后在java中我调用本地函数来使用JNI访问C++中的数据。数据存储在正在运行的 C++ 程序中。那么这可能吗?C++ 程序可以有一些保护吗?所以我不能通过对象的指针访问它的数据?
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-12-10
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

谢谢。我发现我认为 JNI 在错误的情况下。我知道 JNI 可以做什么,但忽略了一些重要的事情。

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

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


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号