1

我正在尝试使用 APKTOOL、Smali 等工具以及 Eclipse 和 NetBeans 等 IDE 制定黑盒测试 APK 的方法。我有我需要的大部分东西——我可以反编译/调试仪器/重新编译/签名/对齐并在设备上运行。

我遇到的问题是在附加调试器后设置断点(断点在 Smali 代码中设置)。看来断点没有提交给 Dalvik 或 Dalvik 没有遵守断点。无论哪种方式,当程序遇到断点时,调试器都不会捕捉。一些研究表明我可能需要Debug.waitForDebugger. (http://stackoverflow.com/questions/3107587/android-with-jdb-confusion-using-waitfordebugger)。

假设是下一个障碍,我可以在调整本地堆栈后waitForDebugger使用 Smali 语法插入它。invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

我的问题是,我在哪里插入呼叫waitForDebugger?我应该在静态构造函数 ( )、实例构造函数 ( )还是其他地方选择MainActivity(来自清单) ?诸如 Eclipse、NetBeans 等 IDE 如何在其调试版本中做到这一点?clinitinitonCreate

4

1 回答 1

1

上述问题的简短答案是将其放入MainActivity.onCreate.

Dima 在 APKTOOL 错误报告中提供的长答案指出这Debug.waitForDebugger是不可靠的,我们应该等待调试器附加:

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

在此错误报告中参考他的答案:NetBeans/Smali Debugging is Broken (SmaliDebugging Page)

于 2012-08-29T18:05:10.003 回答