app逆向篇之新手必读smali语法

  • 关键字

    名称注释
    .class类名
    .super父类名,继承的上级类名名称
    .source源名
    .field变量
    .register寄存器
    .method方法名
    .end method方法名的结束
    .public公有
    .protected半公开,只有同一家人才能用
    .private私有,只能自己使用
    .parameter方法参数
    .prologue方法开始
    .line xxx位于第xxx行
  • 数据类型对应

smali类型java类型注释
Vvoid无返回值
Zboolean布尔值类型,返回0或1
Bbyte字节类型,返回字节
Sshort短整数类型,返回数字
Cchar字符类型,返回字符
Iint整数类型,返回数字
Jlong (64位 需要2个寄存器存储长整数类型,返回数字
Ffloat单浮点类型,返回数字
Ddouble (64位 需要2个寄存器存储)双浮点类型,返回数字
stringString文本类型,返回字符串
Lxxx/xxx/xxxobject对象类型,返回对象
  • 常用指令
关键字注释
const重写整数属性,真假属性内容,只能是数字类型
const-string重写字符串内容
const-wide重写长整数类型,多用于修改到期时间。
return返回指令
eq等于
ne不等于
lt小于
gt大于
ge大于等于
le小于等于
z0的意思
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之旅】 (在这里你能学到我的所见、所闻、所思、所学)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光亦不回首

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值