1
我在Java程序中有兩個類。 A類和B類。 B類包含一個將執行C++代碼的本地函數。限制C++代碼訪問JNI中的某些類
據我所知,C++代碼將運行在與Java代碼相同的進程中。
我的問題是,如何限制C++代碼訪問Java內存並讀取A類參數?
我在Java程序中有兩個類。 A類和B類。 B類包含一個將執行C++代碼的本地函數。限制C++代碼訪問JNI中的某些類
據我所知,C++代碼將運行在與Java代碼相同的進程中。
我的問題是,如何限制C++代碼訪問Java內存並讀取A類參數?
恐怕你的運氣了。與反射不同,JNI完全無法保證:CallVoidMethod()或GetIntField()可以訪問所有內容。
在一定程度上,混淆可以提供幫助。如果類A被混淆,則其所有字段和方法的人類可讀名稱都將消失。通常混淆器會生成穩定的,可預測的名稱,但通過一個簡單的trick,它們可以被隨機化。 Proguard還可以「優化」你的班級,並介紹一些方法。不存在的方法不能通過JNI調用。
但是,字段仍然存在,從「外部」調用的方法仍然存在,甚至可能會保留其名稱。因此,最好不要將不能信任的JNI庫加載到進程中。那麼,對於任何DLL都是如此。