admin 管理员组文章数量: 1086864
smali语言详解之字段的声明(变量、常量)
smali语言详解之字段的声明(变量、常量)
一、smali语言的字段声明格式
1.1、非静态变量
.field 权限修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字
1.2、静态变量
.field 权限修饰关键字 静态修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字
注意关于静态变量初始化赋值问题,详见博客:smali语言详解之static静态代码块的声明与静态变量初始化赋值位置
1.3、常量
注意当常量值为数字时需用16进制表示
.field 权限修饰关键字 静态修饰关键字 final 常量名:常量类型的全包名路径或与java对应的数据类型关键字 = 常量的值
1.4、smali与java之间基本数据类型的对应关系
smali | java |
---|---|
B | byte |
S | short |
I | int |
J | long |
F | float |
D | double |
C | char |
Z | boolean |
V | void |
[ | 数组 |
L+全类名路径用/分隔,以分号结尾 | object(对象和类) |
二、示例
java完整代码如下
package com.ylw.helloworld;public class Test {private static final String STR = "hello"; //常量private static final int TAKE_PHOTO = 1; //常量private static int a;private int b;private int[] c;private String d;private String[] e;
}
对应的smali完整代码如下
.class public Lcom/ylw/helloworld/Test;#(此行不可删)Lcom/ylw/helloworld/Test;为类的全包名路径,根据实际情况有所不同
.super Ljava/lang/Object;#(此行不可删)声明父类,当没有使用extends写明继承时,默认继承Object类
.source "Test.java"#(此行可删)#表示此smali代码对应的java源码文件# static fields#自动生成的注释,表明以下为静态字段,可以看出final常量需要额外用等于号赋值
.field private static final STR:Ljava/lang/String; = "hello".field private static final TAKE_PHOTO:I = 0x1.field private static a:I# instance fields#自动生成的注释,表明以下为实例字段
.field private b:I.field private c:[I.field private d:Ljava/lang/String;.field private e:[Ljava/lang/String;#以下内容为无参构造,与本文章内容无关,不做解释
# direct methods
.method public constructor <init>()V.registers 1.prologue.line 3invoke-direct {p0}, Ljava/lang/Object;-><init>()Vreturn-void
.end method
本文标签: smali语言详解之字段的声明(变量常量)
版权声明:本文标题:smali语言详解之字段的声明(变量、常量) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1693615507a232565.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论