10

Androidでは、レイヤー通信もdev/binder担当します。メッセージを聞くことはできますか?デコードする必要があることはわかっていますが、どうすればこのメッセージを取得できますか。たとえば、アプリがメッセージを送信してジオロケーションになったとします。私は自分のAndroidデバイスにもrootを持っています。

4

5 に答える 5

4

短い:いいえ、ルートがあっても、それは不可能なはずです。

ネット上にはバインダーに関する詳細な情報はあまりありませんが、特にセキュリティに関する情報はいくつかあります。これを参照するか、ここでポイント3.8を参照してください。カーネルドライバのソースとopenbinderのソースを読むこともできます。

于 2012-02-17T18:04:09.687 に答える
4

なぜ、何度も何度も、間違った答えが正しいものとして承認されるのですか?

Jtrace(bin dumpと混同しないでください)では、Androidをまったく変更する必要はありません。また、バインダーメッセージをスヌープできます。ただし、エンドポイントの1つをjtraceする必要があるという制限があります。

Bindumpはdebugfsを使用しますが、これはエンドポイントのみを表示します。@エイドリアン-あなたが間違った結論を得たのではないかと思います。

Jtraceは、出入りするsys呼び出しをトラップし、プロセスメモリを検査して(ptrace(2)を使用して)バインダーメッセージを解決します。カーネルにptrace(2)があり(debugserverが愚かにそれを必要としているため)、rootである場合は、メッセージをスヌープできます。繰り返しますが、エンドポイントにいる必要があります。

そして、@ Luminger-彼の主題について-情報が見つからないという理由だけで、情報がないという意味ではありません。NewAndroidBook.comにはBinderに関する情報がたくさんあります。本のほかに、Binderのプレゼンテーションリンクを参照してください。

于 2017-08-02T17:03:55.930 に答える
3

このバージョンのstraceを使用して、通過するバインダートランザクションのほとんどをデコードできます:https ://github.com/adetaylor/strace-android/tree/android

ioctlプロセスがBinderカーネルドライバーに要求を行う方法である呼び出しをデコードするための拡張機能があります。ブランチを使用するようにしてください。そうしandroidないと、これらの変更のメリットを享受できません。

NDKスタンドアロンツールチェーンを使用してこれを構築できるはずです。docs/STANDALONE-TOOLCHAIN.htmlAndroidNDKのドキュメントをご覧ください。

于 2013-02-05T22:04:13.473 に答える
2

カスタムカーネルをインストールする場合、バインダードライバーコード(drivers/staging/android/binder.c)には、条件付きメッセージやバインダートランザクションを出力できる関数など、非常に優れたデバッグ機能があります。

具体的にbinder_debug_maskは、次の列挙子の適切な組み合わせを使用して設定することにより、カーネルログにさまざまな種類のデバッグメッセージが表示されます。

BINDER_DEBUG_USER_ERROR
BINDER_DEBUG_FAILED_TRANSACTION
BINDER_DEBUG_DEAD_TRANSACTION
BINDER_DEBUG_OPEN_CLOSE
BINDER_DEBUG_DEAD_BINDER
BINDER_DEBUG_DEATH_NOTIFICATION
BINDER_DEBUG_READ_WRITE
BINDER_DEBUG_USER_REFS
BINDER_DEBUG_THREADS
BINDER_DEBUG_TRANSACTION
BINDER_DEBUG_TRANSACTION_COMPLETE
BINDER_DEBUG_FREE_BUFFER
BINDER_DEBUG_INTERNAL_REFS
BINDER_DEBUG_BUFFER_ALLOC
BINDER_DEBUG_PRIORITY_CAP
BINDER_DEBUG_BUFFER_ALLOC_ASYNC

また、コード全体の戦略的な場所にprint_binder_*含まれている関数のいくつかを振りかけることもできます。binder.cたとえば、print_binder_buffer()またはprint_binder_transaction()。特定のuidまたはpidに基づいてこれらを条件付きにすることをお勧めします。そうしないと、ログによって大量のデータが飛んでしまうためです。

于 2014-08-19T20:59:20.460 に答える
2

@エイドリアン、問題が他の開発者/研究者によって行われたので、あなたは彼らの結果を利用することができます。

まず、Jonathan Levin(別名Technologeeks)のすばらしい作品、つまり最近無料になり、本の関連Webサイトnewandroidbook.comからアクセスできるAndroid内部に関する彼の本を確認することをお勧めします。そこから、リンク、説明、使用例を入手できます。

  • bindump

    これはコマンドの単純な派生物であり、service選択したシステムサービスへのハンドルを取得し、ディレクトリ内の自身のエントリを検査し/sys/kernel/debug/binder/procます。すべてのバインダーデバッグデータは誰でも読み取り可能であるため、ルート化されていないデバイスでもこのツールを実行できます。

  • jtrace、の拡張バージョンでありstrace、その利点の1つstrace

    バインダーメッセージの解析(自動検出)。

OpersysKarim Yaghmourと)によって行われたもう1つの素晴らしい作業は、間違いなく注目して見る価値があります。

  • バインダーエクスプローラー

    このツールは、アプリとして、またはHTML GUIとともに機能し、接続のグラフィカルビューをリアルタイムで表示します。

于 2017-06-06T20:45:40.393 に答える