【问题标题】:Debug (ASM) running Android Application调试 (ASM) 运行 Android 应用程序
【发布时间】:2014-09-08 12:20:00
【问题描述】:

所以我用谷歌搜索了这个,但找不到明确的答案。

我有一个执行某种后台计算的 Android 应用程序。我不再可以访问源代码,而且它是使用 NDK 编写的,所以不能使用 dex2jar。

我想做的是以某种方式附加一个调试器并查看计算的汇编来解决它,因为我想不出任何其他方法来做到这一点?

网上似乎没有太多关于这方面的信息。

【问题讨论】:

    标签: android debugging assembly android-ndk


    【解决方案1】:

    如果 APK 是在调试模式下构建的(包含 gdbserver),您可能会让它工作,但您可能需要仔细分析 ndk-gdb 脚本,或者构建一个 ndk-gdb 可以查看的模拟项目在发挥它的魔力。

    或者,如果您可以在运行时不单步执行它(检查寄存器等),您也可以反汇编 .so 文件。试试<NDK>/toolchains/arm-linux-androideabi-*/prebuilt/*/bin/arm-linux-androideabi-objdump -d libfoo.so。如果手臂与拇指模式的检测不起作用,您可能需要添加-M force-thumb。这显然需要更多的工作,并且您无法检查中间值,但几乎可以使用任何库。

    【讨论】:

    • 如果我通过 zip 程序打开 apk,我可以看到其中已经存在一个 .so 文件。会是这个吗?..它也很大,比如 30MB,所以要花很多时间来浏览它!
    • 是的,.so 文件是您应该查看的文件。一个 30 MB 的 .so 显然需要很长时间来拆卸,但如果你幸运的话,你可能能够隔离你想要理解的部分——但能够在运行时检查它当然会有很大帮助。但不幸的是,我认为这只有在 APK 以调试模式构建且 gdbserver 可用时才可行。如果您在有根设备(或例如您自己从 AOSP 构建的固件)上运行它,您也可以调试它。
    • 我确实可以访问有根(和非根)设备。我将如何尝试使用有根设备进行调试?
    • 我实际上并不确定细节 - 我只为我自己构建的固件做过。我找到了redmine.replicant.us/projects/replicant/wiki/GDBDebugging,它向您展示了如何做到这一点。基本上,尝试以某种方式在设备上安装 gdbserver 二进制文件,以 root 身份运行以附加到正确的进程,通过 adb 转发端口,然后在本地运行 arm-linux-androideabi-gdb(您可以在 NDK 中找到它),跳过sysroot/solib-search-path 步骤,但设置文件选项(指向 .so 文件)并运行“目标”命令以附加到远程 gdbserver。
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多