Smali语法基础

作者: 红尘丶 | 来源:发表于2018-10-27 17:49 被阅读11次

    《笔记》
    基本类型对比(smali-java):
    V void (只能用于返回值类型)
    Z boolean
    B byte
    S short
    C char
    I int
    J long
    F float
    D Double

    .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_

    .class        :类名
    .super        :父类
    .source        :源文件名
    .implements        :继承的接口
    .field        :类成员变量
    .method        :类方法
    .parameter          :函数参数  p1,p2...
    .locals x        :局部变量(个数)
    
    const/16 v0, 0x64            :int v0 = 0x64   ,4/16/64 bit  
    const/high16 v0, 0x7f03        :float v0=0x7f03
    const-wide/16 v0, 0x4L   :long v0=0x4L 16/32 bit
    const-wide/high16 v0, 0x34   : double v0=0x34
    const-string v0, "1111"        :字符串
    
    add-int v0, p0, p1    :v0 = p0 + p1(static函数参数 从p0 开始)
    sub-int v0, p1, p2    :v0 = p1 + p2(普通成员函数参数从 p1 开始)
    mul-int v0, p1, p2    :v0 = p1 * p2
    div-int v0, p1, p2    :v0 = p1 / p2
    
    add-int/2addr v0, v1    :v0+v1放到 v0所在的地址
    sub-int/2addr v0, p2    :v0-p2放到 v0所在的地址
    
    if-ne    :if(x != y)
    
    iput-object v0, p0, Lcom/xyz/smali/SmaliActivity;->string:Ljava/lang/String;    :成员变量 v0 = string;
    iget-object v0, p0, Lcom/xyz/smali/SmaliActivity;->mBtn:Landroid/widget/Button;     :关联成员变量
    
    sput v0, Lcom/xyz/smali/SmaliActivity;->OK:I    :sput 给static变量赋值
    sput-wide v0, Lcom/xyz/smali/SmaliActivity;->dou:D    :sput-wide 给static的宽字节变量赋值
    sput-object v0, Lcom/xyz/smali/SmaliActivity;->sss:Ljava/lang/String;
    sget v1, Lcom/xyz/smali/SmaliActivity;->OK:I    :关联static变量
    
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V    : this.super.onCreate();
    invoke-static {p1, p2}, Lcom/xyz/smali/SmaliActivity;->add(II)I        :调用静态函数  add(p1, p2)
    invoke-virtual {v0, p0}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V    :调用虚函数
    
    move-result v0        :前面调用函数后,把结果放到 v0
    move-result-object v0    :前面调用函数返回的对象给 v0
    
    check-cast v0, Landroid/widget/Button;    :强制类型转换  mBtn = (Button) findViewById(R.id.btn);
    
    return-void      :return ;
    

    相关文章

      网友评论

        本文标题:Smali语法基础

        本文链接:https://www.haomeiwen.com/subject/fyidtqtx.html