2013年10月2日 星期三

如何使用gdb debug apk

這篇文章中我談到如何使用gdb配合上adb來進行native process除錯.
但是如果除錯的對象是一個apk的話要怎麼辦?
因為apk是以依附在android framework上執行的
所以在/system/bin下面並無法找到一個相對應的process來獲取symbol

解決方法如下:
1. 將apk啟動(這是以attach的方式進行debug, 如果需要從一開始就進入debug mode的話, 請研究一下am的使用方法)
2. 在平台上找到apk的process id 以bluetooth為例
# ps | grep bluetooth
bluetooth 4040  2412  665656 24064 ffffffff 400f6004 S com.android.bluetooth
3. 將gdbserver attach上去

# gdbserver :5039 --attach 4040
4. 在pc端進行adb forward
$ adb forward tcp:5039 tcp:5039
5. 將gdbclient attach到app_process上
這裡就是重點了
所有的apk其實都是從app_process spawn出來的
所以可以藉由app_process找到正確的symbol
$ gdbclient app_process

這樣就大功告成
Enjoy!

參考資料:
1. http://blog.csdn.net/androidsecurity/article/details/8859313


4 則留言:

  1. gdbclient怎么attach到app_process?gdbclient不是先需要target remote才能附加到调试器上吗

    回覆刪除
    回覆
    1. app_process是本機端的
      也就是out/target/product/xxx/system/bin/app_process

      刪除
    2. 谢谢。所以你说的应该是调试系统应用吧,out是android source编译后的目录。如果我要调试自己的apk,是不是也可以用这个app_process?

      刪除
    3. 可以,但只能debug JNI以下
      java層除了使用eclipse外
      我還沒有發現別的方法

      刪除