基础知识之Smali-代码篇(2)
Smali-java变量定义对照
java:
点击查看代码
byte _byte=127;
short _short=888;
int _int=1234;
long _long=786565455;
float _float=347823.99f;
double _double=6875654564.121;
char _char='易';
boolean _bool=true;
点击查看代码
const/16 v1, 0x7f
.local v1, "_byte":B
const/16 v3, 0x378
.local v3, "_short":S
const/16 v6, 0x4d2
.local v6, "_int":I
const-wide/32 v4, 0x2ee2094f
.local v4, "_long":J
const v7, 0x48df8c00
.local v7, "_float":F
const-wide v8, 0x41f99d229a41ef9eL
.local v8, "_double":D
const/16 v2, 0x6613
.local v2, "_char":C
const/4 v0, 0x1
.local v0, "_bool":Z
const/16 V1,0x7f :意思是0x7f放入V1寄存器,占用16位字节;.local v1, "_byte":B:意思是寄存器V1别名命名为_byte,数据类型为B(其他语句逻辑类似)
类声明
格式:.class+权限修饰符+类名
java:
public class Test implements CharSequence{
}
Smali:
声明类和继承父类(可以+接口+反编译标识)
点击查看代码
.class public LTest; #声明类(不可省略)
.super Ljava/lang/Object; #声明该类所继承的父类,同Java,若没有指定其他父类,则所有类的父类都是Object(不可省略)
.implements Ljava/lang/CharSequence; #若该类实现了接口,则添加该代码(视情况可省略)
.source "Test.java" #反编译的过程中自动生成的标识该smali类对应的java源码类的标识,无实际作用(可省略)
函数声明
.method 权限修饰符+静态修饰符+方法名(参数类型)返回值类型
#方法体
.end method
Smali-java对照
java
public class Test #(类)
{
public static void getName(){} #(函数)
}
Smali
点击查看代码
.class public LTest;
.super Ljava/lang/Object;
.source "Test.java"
.method public static getName()V
return-void
.end method
带参带返回值示例:
点击查看代码
java:
public class Test
{
public static String getName(String a,int b){
return "hello"
}
}
Smali:
.class public LTest;
.super Ljava/lang/Object;
.source "Test.java"
.method public static getName(Ljava/lang/String;I)Ljava/lang/String;
const-string v0, "hello"
return-object v0
.end method

浙公网安备 33010602011771号