Smali 语法学习

可以根据Dalvik opcodes来学习这些 smali 指令

new-array

 const/4 v6, 0x2 # 数组元素个数
 new-array v7, v6, [Ljava/lang/Class;  # v7持有数组的引用

aput-object vx,vy,vz

vx: 表示类型
vy: 引用
vz: 角标
    const/4 v6, 0x2
    new-array v6, v6, [Ljava/lang/Class; 
    const/4 v7, 0x0   # 索引 0位子
    const-class v8, Ljava/lang/Long; # 元素类型
    aput-object v8, v6, v7
    const/4 v7, 0x1   # 索引 1 位子
    const-class v8, Ljava/lang/Integer; #元素类型
    aput-object v8, v6, v7

new-instance

new-instance v0, Ljava/lang/String; # 创建String 对象

invoke-direct

invoke-direct {p0}, Ljava/lang/Object;->()V # 表示直接调用无参构造方法

invoke-virtual

invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V # 执行虚拟方法

invoke-static

invoke-static {}, Lcom/example/lib/smali/HelloWorld;->sayHello()V # 执行静态方法

.line

.line 14 # 在java源文件中对应的行号

return-void

return-void # 方法返回 void

.locals

.locals 0 # 指定局部变量的个数

.local v0, “str”:Ljava/lang/String; #局部变量 str 类型为String

sget-object

sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream; # 普通对象赋值

const-string

const-string v0, “haha” # 将字符串”haha” 赋值给 v0

return-object

return-object v0 # 将v0 作为返回值返回

.end method

.end method #方法结束符

const/4

const/4 v1, 0x1 # 将占有4字节的变量赋值给变量v1,这里是将 v1 等于1

check-cast

check-cast v2, Lcom/example/duia/myapplication/ShadeView; # 类型转换检查

iput-object

# 为v2赋值等于root_ll,当前的Activity 持有v2的引用
iput-object v2, p0, Lcom/example/duia/myapplication/MainActivity;
->root_ll:Lcom/example/duia/myapplication/ShadeView;

add-int/lit8

add-int/lit8 v7, v7, 0x7 # v7 = v7 + 7

:try_start_0

try 语句的开始部分

:try_end_0

try 语句的结束部分

猜你喜欢

转载自blog.csdn.net/lovebuzhidao/article/details/80421441