1

APKTOOL、Smali などのツール、および Eclipse や NetBeans などの IDE を使用して APK をブラック ボックス テストする方法を考え出そうとしています。必要なものはほとんど揃っています。デコンパイル/デバッグ インストゥルメント/再コンパイル/署名/アラインし、デバイス上で実行できます。

私が抱えている問題は、デバッガーが接続された後にブレークポイントを設定することです (ブレークポイントは Smali コードで設定されます)。ブレークポイントが Dalvik に送信されていないか、Dalvik がブレークポイントを尊重していないようです。いずれにせよ、プログラムがブレークポイントに遭遇したときに、デバッガーはスナップしません。いくつかの調査では、必要になる可能性があることが示されていますDebug.waitForDebugger。(http://stackoverflow.com/questions/3107587/android-with-jdb-confusion-using-waitfordebugger)。

が次のハードルであると仮定すると、ローカル スタックを調整した後、waitForDebuggerSmali 構文を使用して挿入できます。invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

私の質問は、どこに呼び出しを挿入するのwaitForDebuggerですか? MainActivity静的コンストラクター ( clinit)、インスタンス コンストラクター ( init) onCreate、または他の場所で(マニフェストから)を選択する必要がありますか? Eclipse、NetBeans などの IDE は、デバッグ ビルドでこれをどのように行うのですか?

4

1 に答える 1

1

上記の質問に対する簡単な答えは、 に入れることですMainActivity.onCreate

APKTOOLバグレポートでDimaによって提供された長い回答Debug.waitForDebuggerは、信頼できないと述べており、デバッガーがアタッチされるのを待ってスピンする必要があります:

boolean debuggerAttached = false;
while(!debuggerAttached ) { ; }

このバグレポートで彼の回答を参照してください: NetBeans/Smali Debugging is Broken (SmaliDebugging Page) .

于 2012-08-29T18:05:10.003 に答える