• smali语法(一)


    一.什么是Smali?

    Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能(注解,调试信息,线路信息等)

    二.smali的语法

    1.原始类型

    • B---byte
    • C---char
    • D---double
    • F---float
    • I---int
    • J---long
    • S---short
    • V---void
    • Z---boolean
    • [XXX---array
    • Lxxx/yyy---object

    解析下最后两项,数组的表示方式是:

    • 在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F;
    • 对象的表示则以L作为开头,格式LpackageName/objectName;(注意必须有个分号跟在最后),例如String对象在smali中为:Ljava/lang/String;,其中java/lang对应java.lang包,String就是定义在该包中的一个对象。

    2.方法的定义

     格式:Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type

    注意:参数和参数间没有任何分隔符,

    1.hello()v

      就是void hello()

    2.hello(lll)Z

      就是boolean hello(int,int,int)

    3.hello(Z[l[lLjava/lang/String;J)Ljava/lang/String 

      就是String hello(boolean,int[],int[],String,long)

    3.基本语法

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

    4.条件跳转分支:

    "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_**

  • 相关阅读:
    1009 说反话 (20 分)
    1007 素数对猜想 (20 分)
    Visual Studio2017下载方法
    百词斩和扇贝打卡测试与评估
    创建者模式->工厂模式
    STM32F427|----------IO讲解与应用
    MySQL的索引
    STM32F103RCt6 与 MG996R
    2020物联网实验室的考核题目
    初学数据库-MySQL&IDEA&Navicat
  • 原文地址:https://www.cnblogs.com/coffee520/p/9639527.html
Copyright © 2020-2023  润新知