-
关键字
名称 注释 .class 类名 .super 父类名,继承的上级类名名称 .source 源名 .field 变量 .register 寄存器 .method 方法名 .end method 方法名的结束 .public 公有 .protected 半公开,只有同一家人才能用 .private 私有,只能自己使用 .parameter 方法参数 .prologue 方法开始 .line xxx 位于第xxx行 -
数据类型对应
smali类型 | java类型 | 注释 |
---|---|---|
V | void | 无返回值 |
Z | boolean | 布尔值类型,返回0或1 |
B | byte | 字节类型,返回字节 |
S | short | 短整数类型,返回数字 |
C | char | 字符类型,返回字符 |
I | int | 整数类型,返回数字 |
J | long (64位 需要2个寄存器存储 | 长整数类型,返回数字 |
F | float | 单浮点类型,返回数字 |
D | double (64位 需要2个寄存器存储) | 双浮点类型,返回数字 |
string | String | 文本类型,返回字符串 |
Lxxx/xxx/xxx | object | 对象类型,返回对象 |
- 常用指令
关键字 | 注释 |
---|---|
const | 重写整数属性,真假属性内容,只能是数字类型 |
const-string | 重写字符串内容 |
const-wide | 重写长整数类型,多用于修改到期时间。 |
return | 返回指令 |
eq | 等于 |
ne | 不等于 |
lt | 小于 |
gt | 大于 |
ge | 大于等于 |
le | 小于等于 |
z | 0的意思 |
e | 等于的意思 |
n | 不的意思 |
l | 小的意思 |
g | 大的意思 |
if-eq | 等于则跳转 == |
if-ne | 不等于则跳转 != |
if-lt | 小于则跳转 < |
if-gt | 大于则跳转 > |
if-ge | 大于或等于则跳转 >= |
if-le | 小于或等于则跳转 <= |
if-eq vA, vB, :cond_** | 如果vA等于vB则跳转到:cond_** |
if-ne vA, vB, :cond_** | 如果vA不等于vB则跳转到:cond_** |
if-lt vA, vB, :cond_** | 如果vA小于vB则跳转到:cond_** |
if-ge vA, vB, :cond_** | 如果vA大于等于vB则跳转到:cond_** |
if-gt vA, vB, :cond_** | 如果vA大于vB则跳转到:cond_** |
if-le vA, vB, :cond_** | 如果vA小于等于vB则跳转到:cond_** |
if-eqz vA, :cond_** | 如果vA等于0则跳转到:cond_** |
if-nez vA, :cond_** | 如果vA不等于0则跳转到:cond_** |
if-ltz vA, :cond_** | 如果vA小于0则跳转到:cond_** |
if-gez vA, :cond_** | 如果vA大于等于0则跳转到:cond_** |
if-gtz vA, :cond_** | 如果vA大于0则跳转到:cond_** |
if-lez vA, :cond_** | 如果vA小于等于0则跳转到:cond_** |
goto :label_** | 强制跳到:label_** |
switch | 分支跳转,一般会有多个分支线,并根据指令跳转到适当位置 |
get | 获取寄存器数据 |
goto使用的注意点:
假如成功的源头是;switch_99298
因为它后面超过8位带宽。goto/不够用。所以用goto/16
也就是说改的时候。如果goto对应分支位数不足。语法不高亮那么就会出错。
【goto分为;goto goto/16 goto/32】
【goto在代码里的应用:无条件跳转
欢迎关注公众号:【时光python之旅】 (在这里你能学到我的所见、所闻、所思、所学)