JVM汇编语言smali

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 (语法文档查询)

常用语句:switch、try-catch
https://blog.csdn.net/qq_32113133/article/details/85163277

我总结一下我的认识:
1.smali文件,先看文件的前3行的描述信息,清楚这个文件的性质(类还是内部类,谁的内部类。)
2.记住smali语法是基于寄存器的,所以原来java很直接的赋值与获取操作,都会间接通过vxxx寄存器。(记住这个规律)
3.不知道smali代码咋写时,可以写个简单的demo反编译出来。
4.写代码一定注意.locals数量的同步

  1. :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一下,如果还不行,重启手机。


image.png

调试技巧

充分利用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互转的工具写反了)

image.png

smali与baksmali

smali与baksmali的官网下载地址:https://bitbucket.org/JesusFreke/smali/downloads/
最新用法:https://www.jianshu.com/p/b2e5da2efb22

smali反编译经验总结:

  • 抓住重点方法addBookMark。
  • 全面分析,在最简单的地方修改。
  • 数据分析,可以制造条件产生不同的数据,然后对比。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本系列出于AWeiLoveAndroid的分享,在此感谢,再结合自身经验查漏补缺,完善答案。以成系统。 Java基...
    济公大将阅读 1,600评论 1 6
  • 原创链接 一、Java面试题java有多重要,对于做android的我们,不需要多说了,let’s go (1)J...
    李福来阅读 2,420评论 0 5
  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 4,511评论 1 10
  • 早安阅读【2019.2.28】 平时多帮人,急时有人帮。 人生在世,谁都有需要搭把手的时候,谁...
    心平气和断舍离阅读 568评论 4 32
  • 亚当被上帝用泥土和水创造出来,犯过错吃了智慧树的果子就看到自己赤身裸体,于是开始害怕神,并且躲了起来。于是神未免亚...
    南沙蟹阅读 5,247评论 0 0

友情链接更多精彩内容