单纯gdb调试android的so断点
2014-01-15 16:53
423 查看
最新的NDK已经支持在eclipse下调试so的c/c++代码了,但设置比较复杂,本人搞了半天都搞不定。就用NDK里的工具直接gdb调试了。
手机端:
1.确保手机root了,再运行adb remount。
2.把apk源码路径下的libs\armeabi\gdbserver push到手机,再chmod可执行权限。
3.安装要调试的apk,运行之。
4.adb shell ps命令查看此apk的pid,比如
app_37 1387 662 192988 18116 ffffffff afd0c53c S com.example.hellojni
pid就是1387
5.运行gdbserver,比如要通过1234端口调试上面pid是1387的应用
gdbserver --attach localhost:1234 1387
显示
Attached; pid = 1387
Listening on port 1234
PC端
1.手机端口映射过来,比如1234端口,在cmd下运行
adb forward tcp:1234 tcp:1234
2.用ndk-build.cmd NDK_DEBUG=1编译带调试信息的so,再用NDK目录里面的arm-linux-androideabi-gdb.exe打开,显示出gdb调试窗口。
3.打开gdbserver的远程端口,比如上面的1234端口,在gdb调试窗口运行
target remote localhost:1234
4.加断点。比如要在43行加断点,在gdb调试窗口运行
b 43
返回错误!!
Cannot access memory at address 0x1a14
是的,0x1a14只是在so中的地址,还要加上so的起始地址。
查看so起始地址要在手机上adb shell查看,比如需调试的apk的pid是1387,cat /proc/1387/maps显示内存地址,找到so的起始地址,比如
80600000-80604000 r-xp 00000000 16:01 39190 /data/data/com.example.hellojni/lib/libhello-jni.so
80604000-80606000 rw-p 00003000 16:01 39190 /data/data/com.example.hellojni/lib/libhello-jni.so
起始地址就是80600000,断点地址就是80601a14。
再设断点,在gdb调试窗口运行b *0x80601a14,成功!!
手机端:
1.确保手机root了,再运行adb remount。
2.把apk源码路径下的libs\armeabi\gdbserver push到手机,再chmod可执行权限。
3.安装要调试的apk,运行之。
4.adb shell ps命令查看此apk的pid,比如
app_37 1387 662 192988 18116 ffffffff afd0c53c S com.example.hellojni
pid就是1387
5.运行gdbserver,比如要通过1234端口调试上面pid是1387的应用
gdbserver --attach localhost:1234 1387
显示
Attached; pid = 1387
Listening on port 1234
PC端
1.手机端口映射过来,比如1234端口,在cmd下运行
adb forward tcp:1234 tcp:1234
2.用ndk-build.cmd NDK_DEBUG=1编译带调试信息的so,再用NDK目录里面的arm-linux-androideabi-gdb.exe打开,显示出gdb调试窗口。
3.打开gdbserver的远程端口,比如上面的1234端口,在gdb调试窗口运行
target remote localhost:1234
4.加断点。比如要在43行加断点,在gdb调试窗口运行
b 43
返回错误!!
Cannot access memory at address 0x1a14
是的,0x1a14只是在so中的地址,还要加上so的起始地址。
查看so起始地址要在手机上adb shell查看,比如需调试的apk的pid是1387,cat /proc/1387/maps显示内存地址,找到so的起始地址,比如
80600000-80604000 r-xp 00000000 16:01 39190 /data/data/com.example.hellojni/lib/libhello-jni.so
80604000-80606000 rw-p 00003000 16:01 39190 /data/data/com.example.hellojni/lib/libhello-jni.so
起始地址就是80600000,断点地址就是80601a14。
再设断点,在gdb调试窗口运行b *0x80601a14,成功!!
相关文章推荐
- Android gdb调试so
- gdb+gdbserver调试android的so文件
- Android动态调试so 使用 gdb + gdbserver 启动调试的过程
- Android下用GDB调试.so的方法
- Android中app调试:gdb如何在动态链接库中设断点
- 发现了Eclipse调试Android的时候的一个小技巧哦!DDMS快速进入断点状态
- android逆向和调试中内存断点的设置
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
- 用GDB调试Android中C/C++程序(命令行)
- gdb 调试android 程序
- IDA动态调试Android SO
- Android系统开发(2)——GDB调试工具
- linux gdb调试动态库(so)的方法
- Android应用方法native ida so隐藏及反调试技术浅析
- 如何使用gdb调试android webkit内核代码
- Android调试gdb初探
- 使用Ida 4000 动态调试Android 中的so文件的方式以及技巧
- 使用GDB调试Android应用中C/C++代码
- [Android Studio 权威教程]断点调试和高级调试
- GDB调试Android代码——环境搭建及调试过程