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所示的连通网可以有多棵权值总和 ...
最新文章
- iOS Plist 文件的 增 删 改
- Spring Security 实战干货:玩转自定义登录
- Intel汇编语言程序设计学习-第三章 汇编语言基础-下
- hdu3177 贪心
- 深度学习核心技术精讲100篇(四十四)-深度召回在招聘推荐中的挑战和实践
- 【阿里云 Linux 服务器】mysql 遇到以下问题Expression #1 of SELECT list is not in GROUP BY clause and contains nonag
- [html] 你知道什么是粘性布局吗?
- 换SSD硬盘,重装系统,一阵子忙乱
- WCF并发连接数的问题
- C# 程序中使用 SQLite 数据库
- 【安装教程】——widows_pycharm远程连接Linux服务器
- 计算机显卡怎样安装方法,电脑装机小知识,新手如何正确安装好独立显卡
- [树的直径 树形DP] UOJ #11【UTR #1】ydc的大树
- Java类加载流程趣谈
- synaptics触摸板新驱动强势更新[附下载]!
- 小程序云服务器机型选择,小程序云服务器机型选择
- 如何解决360极速浏览器主页无法修改问题
- 机器学习的梯度下降中学习率的选取
- LVGL 官方UI设计工具 EdgeLine代码移植
- python中bind的用法_Python socket.bind方法代码示例
热门文章
- 论文笔记--3D Human Pose Estimation with Spatial and Temporal Transformers(用空间和时间变换器进行三维人体姿势估计)
- [架构设计]-- 数据库设计原则
- PEAR:PHP扩展与应用库
- 十二种常见设计模式代码详解
- 随机数种子与伪随机数生成原理
- 机器学习算法:支持向量机(SVM)
- 计算机是否属于公共管理类,公共管理类包含的专业有哪些
- java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z错误
- 使用JMH进行性能测试
- js文件报错:Uncaught TypeError: Cannot read property 'split' of null