2017-06-01 43 views
1

我在Java程序中有兩個類。 A類和B類。 B類包含一個將執行C++代碼的本地函數。限制C++代碼訪問JNI中的某些類

據我所知,C++代碼將運行在與Java代碼相同的進程中。

我的問題是,如何限制C++代碼訪問Java內存並讀取A類參數?

I want to protect Class A's Parameters from the C++ code

回答

3

恐怕你的運氣了。與反射不同,JNI完全無法保證:CallVoidMethod()或GetIntField()可以訪問所有內容。

在一定程度上,混淆可以提供幫助。如果類A被混淆,則其所有字段和方法的人類可讀名稱都將消失。通常混淆器會生成穩定的,可預測的名稱,但通過一個簡單的trick,它們可以被隨機化。 Proguard還可以「優化」你的班級,並介紹一些方法。不存在的方法不能通過JNI調用。

但是,字段仍然存在,從「外部」調用的方法仍然存在,甚至可能會保留其名稱。因此,最好不要將不能信任的JNI庫加載到進程中。那麼,對於任何DLL都是如此。