最近小编看很多正在学习的朋友们都不知道smali语法,那今天小编就找了很多资料,在网上也整理了一些,弄成了干货,大家都可以来学习学习!
我们都知道,Dalvik 虚拟机(Dalvik VM)是 Google 专门为 Android 平台设计的一套虚拟 机。区别于标准 Java 虚拟机 JVM 的 class 文件格式,Dalvik VM 拥有专属的 DEX 可执行文件 格式和指令集代码。smali 和 baksmali 则是针对 DEX 执行文件格式的汇编器和反汇编器,反 汇编后 DEX 文件会产生.smali 后缀的代码文件,smali 代码拥有特定的格式与语法,smali 语 言是对 Dalvik 虚拟机字节码的一种解释。
Smali 语言起初是由一个名叫 JesusFreke 的 hacker 对 Dalvik 字节码的翻译,并非一种官 方标准语言,因为 Dalvik 虚拟机名字来源于冰岛一个小渔村的名字,JesusFreke 便把 smali 和 baksmali 取自了冰岛语中的“汇编器”和“反编器”。目前 Smali 是在 Google Code 上的一 个开源项目。
虽然主流的 DEX 可执行文件反汇编工具不少,如 Dedexer、IDA Pro 和 dex2jar+jd-gui, 但 Smali 提供反汇编功能的同时,也提供了打包反汇编代码重新生成 dex 的功能,因此 Smali 被广泛地用于 APP 广告注入、汉化和破解,ROM 定制等方面。
(来源丨smali学习笔记)
基本数据型
smali类型 java类型
V void
Z boolean
B byte
S short
C char
I int
J long (64位 需要2个寄存器存储)
F float
D double (64位 需要2个寄存器存储)
smali对象 java对象
Lpackage/name/ObjectName; package.name.ObjectName
Ljava/lang/String; java.lang.String
// L:表示这是一个对象类型
// package/name:该对象所在的包
// ;:表示对象名称的结束
数组
smali数组 java数组
[I int[] 一维数组
[[I int[][] 二维数组
[Ljava/lang/String String[] 对象数组
注:每一维最多255个
变量
package/name/ObjectName;——>FieldName:Ljava/lang/String;
smali字段 java字段
public f1:Z public boolean f1;
public f2:I public int f2;
public f3:L java/lang/String; public String f3;
原文始发于微信公众号(映山红coin安全团队):smali基本语法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论