smali语法:
有点类似于JNI的语法
https://blog.csdn.net/pinksofts/article/details/82791806 (讲的很详细)
https://blog.csdn.net/yuanguozhengjust/article/details/80493963
https://blog.csdn.net/qq_34149335/article/details/82699029
https://blog.csdn.net/qq_36252044/article/details/86636885
https://blog.csdn.net/jaysong2012/article/details/41007745 (总结的很简单)
https://blog.csdn.net/qq373432361/article/details/49557579 (语法文档查询)
变量定义
局部变量:
final null:const/4 v1, 0x0
final String:const-string v0, "-1"
控制语句
https://www.cnblogs.com/zhen-android/p/7259434.html
https://www.cnblogs.com/lee0oo0/p/3728271.htmlonclick+switchcase
https://www.jianshu.com/p/140740e9c8e6
常用语句:switch、try-catch
https://blog.csdn.net/qq_32113133/article/details/85163277
类(包括内部类)
https://blog.csdn.net/weixin_44946052/article/details/89409452 (写的挺详细)陌生关键字
check-cast:强转
synthetic :修饰变量的关键字,表明这个变量是编译器自己合成的。 https://www.cnblogs.com/eustoma/p/8991297.html
jumbo:相当于final关键字复杂对象
https://www.jianshu.com/p/f9fa118153b6
aget-object v2, v2, v3
获取数组v2(第二个v2)里面的第v3个元素v2(第一个v2)
我总结一下我的认识:
1.smali文件,先看文件的前3行的描述信息,清楚这个文件的性质(类还是内部类,谁的内部类。)
2.记住smali语法是基于寄存器的,所以原来java很直接的赋值与获取操作,都会间接通过vxxx寄存器。(记住这个规律)
3.不知道smali代码咋写时,可以写个简单的demo反编译出来。
4.写代码一定注意.locals数量的同步
- :cond_x和:goto_0是用来是控制语句关键字,跳转的时候不要蒙蔽,可以写个简单的demo测试 。
6.不同的smali文件夹下的类可能会相互跳转,要注意。
smali语法实战:
插入日志
https://www.52pojie.cn/thread-665362-1-1.html
1.最简单的实战demo
https://www.it610.com/article/4638551.htm (麻雀虽小,五脏俱全)
2.AndroidStudio调试Smali
https://blog.csdn.net/ausboyue/article/details/80189184
https://blog.csdn.net/qq_34149335/article/details/81668503 (这里我要纠正一下作者的一个观点:说app端口是8600和8700的并没有错,关键清单里debugable要设置为true,然后DDMS就会显示8700或者8600)
https://www.cnblogs.com/foundkey/p/10256984.html (不必使用adb forward tcp:10001 jdwp:26793,直接使用8600或者8700进行debug即可。)
https://www.jianshu.com/p/9843e80f5ac5
IDEAAttach前先要执行:
adb shell am start -D -n com.mosheng/com.mosheng.view.activity.AppStartPager
多次Attach报错:adb kill-server再adb start-server一下,如果还不行,重启手机。
调试技巧
充分利用step over与step into的技巧,在碰到线程时step over就不好使了,用step into可以追踪到方法,想退出step into的方法,可以step out。
3.借助工具
unicode码转中文: http://tool.chinaz.com/tools/unicode.aspx (smali里的中文都是\u码,转成中文便于理解。)
as的java2smali插件:https://www.jianshu.com/p/cdde8121c823
4. 如何拼接字符串
https://blog.csdn.net/weixin_33841503/article/details/91443117
smali与dex 、Java互转
https://www.jianshu.com/p/fb9aec070c0a (纠正一下:smali与dex互转的工具写反了)
smali与baksmali
smali与baksmali的官网下载地址:https://bitbucket.org/JesusFreke/smali/downloads/
最新用法:https://www.jianshu.com/p/b2e5da2efb22
smali反编译经验总结:
- 抓住重点方法addBookMark。
- 全面分析,在最简单的地方修改。
- 数据分析,可以制造条件产生不同的数据,然后对比。