アプリから Android カーネルへのシステム コールを行うことはできますか? 例: system(cmd) は C プログラム内にあり、Android アクティビティで JNI を使用してアクセスしています。
1 に答える
0
答え: システム コール - はい。system() の呼び出し - のようなものです。
2つは同じものではありません。システム コールはカーネルによって提供され、Bionic はその上にシン ラッパーを提供します。これは、通常の LibC がバニラ Linux でシステム コールをラップするのとほぼ同じ方法です。
ただし、system() はシステム コールではなく、LibC によって提供される関数であり、実質的には fork() と同等であり、次に子プロセスで execl("/system/bin/sh", "... args") と待つ。
Bionic が system() をエクスポートしていないことが示されている Android ソースをざっと見てみましょう。ただし、手動で実装できます。しかし、もっと重要なのは、なぜそうしたいのかという質問です。技術的には、JNI (Java では System.loadLibrary) をロードして、ネイティブ メソッドに何でもさせることができますが、特にアプリケーションがサンドボックス化されており、シェル コマンドの通常の動作に依存できないことを考えると、これは非常に複雑になります (ほとんどはデバイスのツールボックスによって提供されます)。
于 2013-04-03T17:57:51.400 に答える