smali语法

smali是Davlik虚拟机的汇编语言,类似于apk反编译后的代码。它基于寄存器,包含基本数据类型、数组、对象、函数、局部变量和指令。函数调用涉及invoke指令,成员变量操作有iget/sget和iput/sput系列。条件语法用于流程控制。了解smali有助于深入理解Android应用底层工作原理。
摘要由CSDN通过智能技术生成

1.smali

   apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。
smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。

2.基本数据类型

  B—byte
  C—char
  D—double
  F—float
  I—int
  S—short
  V—void
  J—long
  Z—boolean

  注意J、Z两个不是对应类型的首字母;在dalvik字节码中,寄存器都是32位的,能够支持任何类型,Long和Double类型是64位的,需要2个寄存器;V 只能用于返回值类型。

3.数组和对象是引用类型

  数组的表示方式是在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F;对象类型以L作为开头来表示,格式是Lpackage/ClassName;(用分号表示对象结束是必须的)

示例:
  String对象在smali中为:Ljava/lang/String;
  Class1对象的一个boolean成员表示为:Lcom/disney/Class1;->isRunning:Z
  Class1对象的一个String对象成员表示为:Lcom/disney/Class1;->name:Ljava/lang/String;
可以总结为格式为对象类型->成员名:成员类型,->表示所属关系,类型尾部必须包括一个分号。
  内部类表示为:Lpackage/ClassName$innerObjectName;,也就是在内部类前加“$”符号。

4.函数

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

  返回类型在最后,参数之间没有任何分隔符,示例:

void fun()
fun()V

boolean fun(int, int, int)
fun(III)Z

String fun(boolean, int[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值