Android NDK系列(2) --- 简单so例子动态分析
来源:互联网 发布:windows原版镜像 编辑:程序博客网 时间:2024/05/21 17:16
SO调试步骤
对于在程序一开始就加载使用的so调试方法,需要在加载的时候下断点才能对该so进行调试:
+ 开启IDA调试服务器./android_server
+ adb forward tcp:23946 tcp:23946
+ am start -D -n 包名/类名;(可以在开发者选项中选择调试程序)
+ 启动IDA主程序,点击菜单 Debugger->Attach->Remote ArmLinux/Android debugger ,弹出调试对话框,在hostname一栏输入当前手机IP,password 留空
然后点击 Debug Opitions 在弹出的Debugger setup窗口的
Events中选择 stop on thread start/exit 以及 stop on library load/unload 点击OK退出。 设置新线程,加载so时断点,continue; 点击F9开始。
+ 打开ddms, 查看调试端口, jdb attach port;
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
+ 这个时候应该已经断在新线程,或者加载so处了,在你感兴趣的so处停下来;
+ 另外用ida 打开so,查看你感兴趣的函数偏移, 加上你感兴趣的so的基地址,打上断点,continue, 就大功告成了。
实例分析
首先,我们在这里动态调试的例子是使用鬼哥教程中的一个例子
链接在这里:http://www.52pojie.cn/thread-313869-1-1.html
1、首先将IDA的调试服务器push到真机中(必须获得ROOT权限)并开启
android_server路径为:IDA路径\dbgsrv
将server push到手机中:
adb push android_server /data/local/tmp/android_server
修改运行权限
运行 ./android_server
2、 调试运行APK
使用am命令调试模式打开APK,也可以在开发者模式中选择使用调试模式打开
打开应用,则会出现如下界面:
3、打开IDA进行调试
启动IDA主程序,点击菜单 Debugger->Attach->Remote ArmLinux/Android debugger
弹出调试对话框,在hostname一栏输入当前手机IP,password 留空,选择OK
选择好需要调试的ggndktest1程序
然后点击 Debug Opitions 在弹出的Debugger setup窗口的
Events中选择 stop on thread start/exit 以及 stop on library load/unload
点击F9开始。
4、使用jdb
在命令行输入:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
5、开始调试
由于在一开始的时候就调用libgg-jni.so,这时候会加载我们需要分析so
由于我们选择了在加载so的时候停下来,那么,在一开始就执行,不好下断点的情况就可以解决了,在刚加载so的时候停下来,我们在Modules中找到相应so,然后就可以开始调试了。
错误解决
问题:
解决:在选择好Options后应该继续执行,然后再使用jdb
- Android NDK系列(2) --- 简单so例子动态分析
- Android下动态链接库.so调用的简单例子
- Android下动态链接库.so调用的简单例子
- Android下动态链接库.so调用的简单例子
- Android NDK JNI 简单例子2
- cocos2dx android ndk 加载动态库(.so)
- Android NDK的简单例子
- Android 之NDK实战系列(2)——通过NDK进行简单的操作
- Android NDK系列(6) — 动态注册native方法
- Android studio ndk开发--简单的例子
- Android NDK系列(4) — SO中调用Java方法
- Android NDK系列(5) — SO中获取Java对象的属性
- Android NDK系列(一)-AS使用javah生成so文件
- Android NDK系列(四)-AS生成jar包、导入so库并使用方法
- Android NDK系列(五)- AS导入so三方库,使用C/C+方法
- Android NDK系列(二)-AS使用CmakeLists生成so文件
- Android NDK开发动态加载so示例源码
- 使用android NDK addr2line 定位so 动态库崩溃位置
- main方法的String[] args参数
- 周志华《机器学习》读书笔记第一章
- 对象的工厂模式和构造函数
- 爬山算法&模拟退火
- 获取到app当前版本
- Android NDK系列(2) --- 简单so例子动态分析
- Radar Installation(区间选点)
- 原型
- 碰撞检测
- android 的学习路线
- DOM拖拽效果源码
- 躁动的小球
- 初探Docker
- java面试笔试题:同步和异步有何异同