宅科技 - 科技,宅出新生活

搜索
热搜: 活动 交友 discuz
如果你还没有论坛的账号,赶快注册吧!
立即注册

合作站点账号登陆

快捷导航
查看: 649|回复: 1

[逆向反编译] Smali基本语法

[复制链接] [提交至百度]

93

主题

104

帖子

956

积分

顶级大神

Rank: 4

积分
956
发表于 2018-5-2 12:42:00 | 显示全部楼层 |阅读模式
扫码领红包
本帖最后由 wx_pmZ7777t 于 2018-5-2 12:45 编辑

.field private isFlag:z  定义变量
.method  方法
.parameter  方法参数
.prologue  方法开始
.line 12  此方法位于第12行
invoke-super  调用父函数
const/high16  v0, 0x7fo3  把0x7fo3赋值给v0
invoke-direct  调用函数
return-void  函数返回void
.end method  函数结束
new-instance  创建实例
iput-object  对象赋值
iget-object  调用对象
invoke-static  调用静态函数

条件跳转分支:
"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_**
=============================================

if函数的java代码:
  1. private boolean ifSense(){
  2.         boolean tempFlag = ((3-2)==1)? true : false;
  3.         if (tempFlag) {
  4.             return true;
  5.         }else{
  6.             return false;
  7.         }
  8.     }
复制代码

if函数分析:
  1. .method private ifSense()Z
  2.     .locals 2

  3.     .prologue
  4.     .line 22
  5.     const/4 v0, 0x1     // v0赋值为1

  6.     .line 24
  7.     .local v0, tempFlag:Z
  8.     if-eqz v0, :cond_0            // 判断v0是否等于0, 不符合条件向下走, 符合条件执行cond_0分支

  9.     .line 25
  10.     const/4 v1, 0x1            // 符合条件分支

  11.     .line 27
  12.     :goto_0
  13.     return v1

  14.     :cond_0
  15.     const/4 v1, 0x0            // cond_0分支

  16.     goto :goto_0
  17. .end method

  18. ###文字描述:如果符合if分支则程序往下走,最终return ; 而如果条件不符合则会走到 :cond_0分支 , 最终执行 goto :goto_0走回 :goto_0返回
复制代码

======================================================

for函数java代码:
  1. private void forSense(){
  2.     listStr = new ArrayList<String>(COUNT);
  3.     for (int i = 0; i < COUNT; i++) {
  4.         listStr.add("现在轮到我上场乐");
  5.     }
  6. }
复制代码

for函数分析:
  1. .line 40
  2.     const/4 v0, 0x0

  3.     .local v0, i:I
  4.     :goto_0
  5.     if-lt v0, v3, :cond_0            //  if-lt判断数值v0小于v3 ,    如不符合往下走, 符合执行分支 :cond_0

  6.     .line 43
  7.     return-void

  8.     .line 41
  9.     :cond_0                // 标签
  10.     iget-object v1, p0, Lcom/example/smalidemo/MainActivity;->listStr:Ljava/util/List;                // 引用对象

  11.     const-string v2, "\u73b0\u5728\u8f6e\u5230\u6211\u4e0a\u573a\u4e50"

  12.     invoke-interface {v1, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z        // List是接口, 所以执行接口方法add

  13.     .line 40
  14.     add-int/lit8 v0, v0, 0x1    // 将第二个v0寄存器中的值,加上0x1的值放入第一个寄存器中, 实现自增长

  15.     goto :goto_0                // 回去:goto_0标签

  16. ###文字描述:设定一个标签goto_0, 判断v0小于v3, 符合执行分支:cond_0 ,然后又跑回:goto_0做继续判断
复制代码




上一篇:解决set-device-owner提示already some accounts on thedevice
下一篇:小米 MIX2s TWRP recovery
回复

使用道具 举报

3

主题

75

帖子

87

积分

提鞋小弟

Rank: 2

积分
87
发表于 2019-4-27 22:28:51 | 显示全部楼层
厉害了,这都有!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信公众号
微信扫码关注,
回复“领取金币”
每周抽取5位
会员奖励500金币

手机版|小黑屋|网站地图|宅科技 ( 粤ICP备15107403号

GMT+8, 2019-11-15 13:14 , Processed in 0.992782 second(s), 27 queries .

Copyright © 2016 宅科技 | 智能终端极客社区

Powered by Discuz! X3.4 Licensed

快速回复 返回顶部 返回列表