基础
基本类型:取首字母大写(特殊的:boolean Z;long J)
Object类型:LPackageName/ObjectName;(必须有这个分号,在cocos中调用android方法时也是用分号隔开的)
数组:[type-name
方法:func-name(param1param2param3……)return-type
备忘
smali代码展示格式:行号+表达式
内部内:class$class,用$连接内部类
WMWActivity$MessageHandler
->表示所属关系。class;->field:type
smali是基于寄存器的,所有操作需要经过寄存器。
本地寄存器表示:v0,v1……。
参数寄存器表示:p0,p1……。在static函数中p0表示第一个参数,在非static函数中,p0表示field所在类的实例(this)。
指令集
格式:操作指令-操作类型 本地寄存器,参数寄存器……
操作指令:iget表示获取instance fields;sget表示获取static fields;aget表示获取数组。put和get一样用法,作用是赋值
操作类型:-boolean,-object。不带这两个则表示操作类型是基本数据类型。
方法调用
1,invoke-调用方式{v0,v1} 2,invoke-调用方式/range{v0 .. v5}(参数多时使用)
调用方式:-direct,-virtual,-static,-super,-interface。
参考资料
Smali介绍:https://blog.csdn.net/lpohvbe/article/details/7981386
指令集:https://blog.csdn.net/u012184539/article/details/82720733
GitHub smali:https://github.com/JesusFreke/smali
网友评论