16

socket()JNI Cメソッドで関数を呼び出すと、アプリケーションは引き続きパーミッションエラーで失敗します。そして、AndroidManifest.xmlにuses-permission行を入れると、問題は修正されます。

したがって、ネイティブC関数を呼び出しているのに、Androidのアクセス許可チェックがDalvik仮想マシンに実装されていないようですが、それでもチェックされます。ptraceAndroidカーネルでチェックが実行される場所、またはすべてのシステムコールをインターセプトするような方法でアプリケーションがトレースされる方法、またはその他の方法を知りたいです。どうもありがとう。

4

2 に答える 2

19

チェックは、グループメンバーシップを使用してアクセス権を決定するLinuxカーネルによって実行されます。

VMのzygoteforkコードを見ると、setgroups()を使用して補足グループIDを設定していることがわかります。アプリフレームワークコードで少し追跡すると、アクセス許可がどこで決定され、forkAndSpecialize()に渡されるかがわかります。

于 2011-03-01T20:29:24.623 に答える
5

ネイティブコードは、SDKアプリが使用するのと同じサンドボックスで実行されるため、SDKアプリと同じセキュリティモデルの対象となります。

AndroidNDKのダウンロードを参照してください。

ネイティブコードを記述した場合でも、アプリケーションは.apkファイルにパッケージ化され、デバイス上の仮想マシン内で実行されます。基本的なAndroidアプリケーションモデルは変更されません。

于 2011-03-01T13:10:05.737 に答える