动态调试 Android so库函数的方法

  1. am start -D -n 包名/类名,以等待调试的模式启动APK应用;

  2. su权限开启android_server,然后adb forward tcp:23946 tcp:23946 转发端口,并用IDA附加相应进程;

  3. 通过DDMS获取相应进程的端口号,然后使用jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700(DDMS查询到的端口号);

  4. 连接成功后,按F9后手机上的“waiting for debugger”提示会自动消失;

  5. 此时在so库的JNI_Onload函数上下断点,可通过Ctrl+S找到对应so库的基址,然后加上JNI_Onload的文件偏移量,即可找到JNI_Onload函数的内存地址,然后按F9运行后即可断下。

下图是使用上述方法,断在某so库JNI_Onload函数的截图: