动态调试 Android so库函数的方法
am start -D -n 包名/类名
,以等待调试的模式启动APK应用;以
su
权限开启android_server
,然后adb forward tcp:23946 tcp:23946
转发端口,并用IDA附加相应进程;通过DDMS获取相应进程的端口号,然后使用
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
(DDMS查询到的端口号);连接成功后,按
F9
后手机上的“waiting for debugger”提示会自动消失;此时在so库的
JNI_Onload
函数上下断点,可通过Ctrl+S
找到对应so库的基址,然后加上JNI_Onload
的文件偏移量,即可找到JNI_Onload
函数的内存地址,然后按F9运行后即可断下。
下图是使用上述方法,断在某so库JNI_Onload
函数的截图: