码迷,mamicode.com
首页 > 系统相关 > 详细

Eclipse 动态调试smali

时间:2015-12-10 21:15:39      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:

学习看雪的文章: http://bbs.pediy.com/showthread.php?t=189610,算是学习笔记,整理一下,万一忘记了可以到博客来查一下。

1. 首先使用apktool反编译apk文件

apktool d -d xxxxx.apk  (-d一定要加, 否则Eclipse中无法设置断点,也就无法调试了)

技术分享

2. 在输出的文件夹中,用文本编辑工具打开AndroidManifest.xml 搜索以下关键字

<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

找到含有以上信息的activity节点,记录其android:name属性的值,该值则为其应用的主类,并修改为包名.主类, 并且增加可调试属性

android:debuggable=”true”

技术分享

修改后

技术分享

3. 在主activity的OnCreate方法中插入调试等待的smali代码

a=0;// invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

技术分享

4. 使用apktool重新编译APK,签名,安装到手机上运行

我在编译的时间又报错了,使用这个方法就可以解决了: http://www.cnblogs.com/dacainiao/p/5036774.html

技术分享

手机上运行:

技术分享

这时你会看到程序运行后停留在白屏界面,这时不要动设备和退出程序,因为程序现在是运行到刚才添加的WAITFORDEBUGGER代码这里,这行代码的意思是一直挂起中,等待调试器。

 

下面开始设置实时调试的环境:

5. 启动ECLIPSE,构建JAVA项目

1) File -> New -> Project -> Java Project -> Next

2) Project Name随便起,Use default location选项去掉,Location选择刚才反编译的文件夹,然后Next

技术分享

3) 选中smali文件夹,然后Finish

 

6. 在ECLIPSE中找到 主activity的OnCreate方法,在WAITFORDEBUGGER后面 添加断点

技术分享

如果你的ECLIPSE中显示的不是上面的样子(a=0; // ..........),说明你在刚才反编译的时间没有加 -d,是设置不了断点的

7. 打开DDMS,如果在第4步中运行了修改后的程序,在DDMS的设备列表中会显示可以调试的程序(端口: 8614)。(如果xxx被占用,可以先吧Eclipse关闭掉,打开DDMS后再开Eclipse)

技术分享

8. 现在要做的就是把代码与调试程序关联即可。 回到ECLIPSE,配置远程调试
1)  菜单Run -> Debug -> Debug Configurations
2)  双击Remote Java Application,Host处默认localhost就行,Port填第7步得到的8614,然后Apply -> Debug。

技术分享

9. 这时ECLIPSE自动切换至DEBUG视图,并看到程序已经运行并中断在下一行可执行的代码了,相关的变量可以直接查看了。

技术分享

技术分享

 

Eclipse 动态调试smali

标签:

原文地址:http://www.cnblogs.com/dacainiao/p/5036967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!