smali语言详解之字段的声明(变量、常量)
smali语言详解之字段的声明(变量、常量)
一、smali语言的字段声明格式
1.1、非静态变量
.field 权限修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字
1.2、静态变量
.field 权限修饰关键字 静态修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字
注意关于静态变量初始化赋值问题,详见博客:smali语言详解之static静态代码块的声明与静态变量初始化赋值位置https://yinglongwu.blog.csdn.net/article/details/129230987
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语言详解之static静态代码块的声明与静态变量初始化赋值位置
smali语言详解之static静态代码块的声明与静态变量初始化赋值位置 一.smali语言的静态代码块声明格式 .method static constructor <clinit>() ...
- smali语言详解之一般/构造方法(函数)的声明与返回值关键字
smali语言详解之一般/构造方法(函数)的声明与返回值关键字 一. smali语言的方法声明格式 .method与.end method成对出现,类似于java中的花括号 1.1.非静态的一般方法 ...
- smali语言详解之类的声明
smali语言详解之类的声明 一.smali语言的类声明格式 .class 权限修饰关键字 类的全包名路径 二.示例 2.1.一般类(无继承和接口实现) java代码如下 public class T ...
- smali语言详解之创建对象
smali语言详解之创建对象 一.smali语言创建对象分两步进行 第一步,声明对象实例,格式如下 new-instance 变量名,该对象对应类的全包名路径 第二步,调用构造方法(如果构造方法内还定 ...
- smali语言详解之方法的调用
smali语言详解之方法的调用 一.方法调用关键字介绍 smali语言方法调用关键字主要有以下五种 invoke-virtual主要用于非私有实例方法的调用.实例方法指不是构造方法.父类方法等的属于这 ...
- Drools 规则语言详解(上)
http://www.blogjava.net/guangnian0412/archive/2006/06/09/51574.html http://www.blogjava.net/guangnia ...
- c++指针详解_c语言详解sizeof
一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等. 它并不是函数. sizeof操作符以字节形式给出了其操作数的存储大小. 操作数可以是一个表达式或括在括 ...
- 如何用c语言编写stm32的程序吗,STM32入门C语言详解
<STM32入门C语言详解>由会员分享,可在线阅读,更多相关<STM32入门C语言详解(6页珍藏版)>请在人人文库网上搜索. 1.最新 料推荐阅读 flash : 芯片内部存储 ...
- 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...
最新文章
- 如何完整卸载wxpython_TextCtrl的WXPython C++部分被删除
- BZOJ4060 : [Cerc2012]Word equations
- Linux下的HDFS命令
- python多行注释出错_python 有多行注释运行报错
- mysql rrd_时间序列数据库rrd启动
- 哪有什么太迟,世界多的是大器晚成
- 木瓜移动创始人沈思专访——从平台到孵化器
- 狼来了 【dfs】【树】
- python脚本批量更改图片大小
- java实现花呗分3、6、12期计算用户每期手续费及每期总费用
- 目标检测的Tricks | 【Trick13】使用kmeans与遗传算法聚类anchor
- 阿里云、蚂蚁区块链医疗解决方案首次应用于未来医院电子处方
- hp服务器下的虚拟机安装系统安装,hp 服务器安装linux系统安装
- 说唱 -- 再见大四
- 敏涵国际品牌:定义高端美妆新力量
- 财路网每日原创推送:科普:分片技术
- 将字符串中的字母全部替换成字母的下一个字母,要是最后一位是z或Z则替换为a或A
- 电力电子器件篇之电容
- 尼日利亚4g频段_尼日利亚初创公司Tizeti在全国范围内推出4G LTE网络
- 华东交通大学计算机专业导师,华东交通大学计算机专业2017考研调剂信息
热门文章
- od机考题目-免单统计-第10讲:高频真题解析 III(上)
- mybatis中关于example类详解mybatis的Example[Criteria]的使用
- 因子分析——建立载荷矩阵
- sql中带有like时如何使用预编译。
- SQL Server 不存在或拒绝访问 (SQL Server 2005)
- linux arm更新内核,Linux内核升级方法
- 无字天书之Python第七页(基础数据结构—上)
- edge运行js文件,控制台查看结果
- 待就业六人组——团队博客汇总
- 网页中怎么插入qq php,在网页中嵌入QQ视频的步骤和代码