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++ 代碼中的某些漏洞。

米琪卡哇伊
TA貢獻1998條經驗 獲得超6個贊
謝謝。我發現我認為 JNI 在錯誤的情況下。我知道 JNI 可以做什么,但忽略了一些重要的事情。
我想問的問題是,能否將C++中的對象指針轉換為java對象,并調用其原生函數來訪問C++中對象的數據。實際上,我需要在 C++ 進程中創建 JVM 來將指針轉換為 Java 或者只是在 Java 進程中調用本機函數。并且當它們是兩個進程時沒有辦法做到這一點,這意味著我運行一個 C++ 進程并將其一個對象的指針提供給另一個正在運行的 Java 進程,然后我想通過調用 Java 進程中的本機函數來訪問 C++ 進程中的數據.
一個進程擁有自己的內存資源,另一個進程無法通過其本機函數調用 (JNI) 訪問。進程可以通過許多方法進行通信,例如套接字。
添加回答
舉報
0/150
提交
取消