1

Android アプリのすぐに使用できる分析を行う予定です。つまり、Android QEMU エミュレーターでアプリを実行し、仮想マシン イントロスペクション (VMI) を実行してアプリの動作を監視します。この目的のために、QEMU エミュレーターをインストルメント化し、アプリの Linux システム コールと Binder IPC を監視しました。

ただし、低レベルの操作を監視しているため、インテントを使用して実行されるプロセス間通信を監視できるかどうかはわかりません。バインダー ドライバーまたはインテントとのインテント トークは Java API レベルで動作しますか。

4

2 に答える 2

1

ほとんどすべてがバインダードライバーを使用しています。 startActivity最終的にここに私たちを導きます:

public ActivityResult execStartActivity(
    Context who, IBinder contextThread, IBinder token, Activity target,
    Intent intent, int requestCode) {
    IApplicationThread whoThread = (IApplicationThread) contextThread;
    if (mActivityMonitors != null) {
        synchronized (mSync) {
            final int N = mActivityMonitors.size();
            for (int i=0; i<N; i++) {
                final ActivityMonitor am = mActivityMonitors.get(i);
                if (am.match(who, null, intent)) {
                    am.mHits++;
                    if (am.isBlocking()) {
                        return requestCode >= 0 ? am.getResult() : null;
                    }
                    break;
                }
            }
        }
    }
    try {
        int result = ActivityManagerNative.getDefault()
            .startActivity(whoThread, intent,
                    intent.resolveTypeIfNeeded(who.getContentResolver()),
                    null, 0, token, target != null ? target.mEmbeddedID : null,
                    requestCode, false, false);
        checkStartActivityResult(result, intent);
    } catch (RemoteException e) {
    }
    return null;
}

ご覧のとおり、Java レイヤーは、実際にアクティビティを開始するネイティブ コードに 2 つのバインダー パラメーターを渡します。ネイティブ コードはこれらのパラメーターを使用して、バインダー ドライバーを使用して IPC を実行します。

于 2013-07-19T03:04:26.303 に答える