没有合适的资源?快使用搜索试试~ 我知道了~
Android逆向之smali学习笔记
需积分: 5 5 下载量 154 浏览量
2022-06-16
12:13:36
上传
评论
收藏 290KB PDF 举报
温馨提示
试读
20页
Android逆向之smali学习笔记
资源详情
资源评论
资源推荐
Java smali
byte B
short S
int I
long J
float F
double D
char C
boolean B
void V
数组 [
object L+全类名路径(用/分割)
Smali学习笔记
1.smali和Java基本数据类型对比
2.注释
在smli语言中注释用"#"表示
3.类声明
比如以下Java代码:
用smali代码表示为:
# 我是注释1
.class +权限修饰符 +类名;1
public class Test{
}
1
2
.class public LTest; # 声明类(必须)
.super Ljava/lang/Object; # 声明父类 默认继承Object(必须)
.implements Ljava/lang/CharSequence;#如果实现了接口则添加
.source "Test.java" # 源码文件(非必须)
1
2
3
4
4.关于分号;
凡是L开头全包名路径结尾都需要加分号
5.字段声明(成员/全局变量)
比如以下Java代码:
用smali代码表示为:
补充:
6.常量声明
比如以下Java代码:
用smali代码表示为:
注意:
1. 静态属性赋值在clinit代码块中进行:public static String a="A";
.field 权限修饰符+静态修饰符(如果是) +变量名:变量全类名路径;1
private static String a;1
.field private static a:Ljava/lang/String; 1
基本数据类型示例:
.method public final pubFinalMethod()V
.field private boType:Z # boolean
.field private byteType:B # byte
.field private shortType:S # short
.field private charType:C # char
.field private intType:I # int
.field private longType:J # long
.field private floatType:F # float
.field private doubleType:D # double
1
2
3
4
5
6
7
8
9
10
.field 权限修饰符+静态修饰符(如果有) final +变量名:变量全类名路径;=常量值1
private static final String a="hello";1
.field private static final a:Ljava/lang/String;="hello" 1
.field public static a:Ljava/lang/String;
.method static constructor <clinit>()V
const-string v0,"A"
sput-object v0,LTest;->a:Ljava/lang/String;
return-void
.end method
1
2
3
4
5
6
2. 非静态属性赋值(包括final)在init构造器中进行:public final String a="A";
7.成员方法/函数声明
比如以下Java代码:
用smali代码表示为:
7.1如果是带参并且带有返回值的方法
比如以下Java代码:
用smali代码表示为:
8.关于方法返回关键字
主要有以下四种:
.field public final a:Ljava/lang/String;
.method public constructor <init>()V
invoke-direct {p0},Ljava/lang/Object;-><init>()
const-string v0,"A"
iput-object v0,p0,LTest;->a:Ljava/lang/String;
return-void
.end method
1
2
3
4
5
6
7
.method 权限修饰符+静态修饰符(如果有) +方法名(参数类型)返回值类型
# 方法体
.end method # 方法结尾标志
1
2
3
public static void getName(){}1
.method public static getName()V
return-void
.end method
1
2
3
public String getName(String p){
return "hello"
}
1
2
3
.method public getName(Ljava/lang/String;)Ljava/lang/String;
const-string v0,"hello"
return-object v0
.end method
1
2
3
4
return-void
return-object
return
return-wide # 表示返回值为64位非对象类型的值(8个字节) 如:long、double
1
2
3
4
剩余19页未读,继续阅读
灼灼十里桃花
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0